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)
| 归档时间: |
|
| 查看次数: |
10103 次 |
| 最近记录: |