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)