如果我运行以下SQL语句:
SELECT * FROM `user-data` t1
LEFT JOIN `users` t2 ON t1.userID = t2.id
WHERE t2.id IS NULL
它为我提供了users
表中没有匹配行的所有行(因为用户已被删除)。但我不能简单地将其变成DELETE
声明:
DELETE FROM `user-data` t1
LEFT JOIN `users` t2 ON t1.userID = t2.id
WHERE t2.id IS NULL
我收到以下错误:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 't1
LEFT JOIN `users` t2 ON t1.userID = t2.id
WHERE t2.id IS NULL' at line 1
如何删除表user-data
中没有现有用户的users
中的所有行?
答案 0 :(得分:2)
而不是使用LEFT OUTER JOIN
和IS NULL
尝试WHERE NOT EXISTS
。像这样:
DELETE t1
FROM user-data t1
WHERE NOT EXISTS
(
SELECT id FROM FROM users WHERE user-data.userID = users.id)
)
答案 1 :(得分:1)
删除连接查询在MySQL中绝对有效。我认为问题是您没有在 DELETE
之后指定别名。因此,以下应该有效:
DELETE t1 FROM `user-data` t1
LEFT JOIN `users` t2
ON t1.userID = t2.id
WHERE t2.id IS NULL
我怀疑这里需要一个别名,因为从我们希望MySQL删除哪个表并不清楚。请注意,使用WHERE NOT EXISTS
方法在DELETE
之后不需要别名。
答案 2 :(得分:0)
我似乎记得你不能在DELETE
中使用表别名。您也可以指定要删除的表格,如下所示:
DELETE `user-data`.* FROM `user-data`
LEFT JOIN `users` ON `user-data`.userID = `users`.id
WHERE `users`.id IS NULL