代码之家  ›  专栏  ›  技术社区  ›  ptrcao

MySQL中删除后的术语

  •  1
  • ptrcao  · 技术社区  · 5 年前

    给出此示例代码:

    DELETE d
    FROM discog d
    JOIN discog d1 ON d1.artist = d.artist AND d1.track = d.track AND d1.year < d.year;
    

    我不明白 d 在删除之后。 根据我的理解,语法的结构应该是

    从表名称中删除

    其中,some_column=some_value

    作者写了什么 D 在删除之后?这个位置代表什么?

    2 回复  |  直到 5 年前
        1
  •  1
  •   Gordon Linoff    5 年前

    这个 delete 有两个表引用:

    DELETE d
        FROM discog d JOIN
             discog d1
             ON d1.artist = d.artist AND d1.track = d.track AND d1.year < d.year;
    

    在本例中,这些引用指向同一个表,但指向不同的行。

    MySQL如何知道要删除哪些行?您可能希望MySQL只从第一个引用的表中删除,但是显式地包含别名是一个更好的解决方案——它要求编写查询以真正清楚地了解代码的意图。

        2
  •  2
  •   dfundako    5 年前

    这是内部联接删除的语法。d表示要从表中删除别名为d的记录,即discog。