我可以在 MySQL DELETE 语句中使用表别名吗?

cod*_*boy 9 mysql delete mysql-5.6

这不起作用:

DELETE FROM topics AS t , posts AS p  USING t INNER JOIN p 
WHERE t.id=p.topic_id AND t.id = '5599';
Run Code Online (Sandbox Code Playgroud)

而这样做:

DELETE FROM topics, posts USING topics INNER JOIN posts 
WHERE topics.id=posts.topic_id AND topics.id = '5599';
Run Code Online (Sandbox Code Playgroud)

在 DELETE 语句中使用表别名是无效的还是有其他方法?

我的目标是删除 ID 为 5599 的所有主题和相关帖子posts.topic_id= 5599

ype*_*eᵀᴹ 13

我不喜欢USING语法。MySQL 文档显示了以下作为声明要从连接中删除哪些表的方法,这几乎与SELECT语法相同。您当然可以使用别名:

DELETE t, p                  -- delete from both tables 
                             -- this can be used as well:  t.*, p.*
FROM topics AS t 
  JOIN posts AS p
    ON t.id = p.topic_id 
WHERE t.id = 5599 ;
Run Code Online (Sandbox Code Playgroud)

另请注意,id=5599仅当有(至少一个)相关帖子时,这才会删除该主题。如果您无论如何都想删除它(即使没有帖子),请LEFT JOIN改用。


作为记录,您(不工作)的第一条语句在错误的位置对表进行了别名。这应该有效:

DELETE FROM t, p 
USING topics AS t INNER JOIN posts AS p 
WHERE t.id=p.topic_id AND t.id = '5599';
Run Code Online (Sandbox Code Playgroud)

或者更好,使用正确的JOIN语法:

DELETE FROM t, p 
USING topics AS t INNER JOIN posts AS p     -- or: LEFT JOIN
   ON t.id = p.topic_id
WHERE t.id = 5599;
Run Code Online (Sandbox Code Playgroud)