删除在单独的表中找不到userID的行

时间:2017-09-07 07:46:26

标签: mysql

如果我运行以下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中的所有行?

3 个答案:

答案 0 :(得分:2)

而不是使用LEFT OUTER JOINIS 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