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

Mysql 删除在单独的表中找不到userID的行,mysql,Mysql,如果运行以下SQL语句: SELECT * FROM `user-data` t1 LEFT JOIN `users` t2 ON t1.userID = t2.id WHERE t2.id IS NULL DELETE FROM `user-data` t1 LEFT JOIN `users` t2 ON t1.userID = t2.id WHERE t2.id IS NULL 它给出了所有在users表中没有匹配行的行,因为该用户已被删除。但我不能简单地将其转换为删除语句: S

如果运行以下SQL语句:

SELECT * FROM `user-data` t1 
LEFT JOIN `users` t2 ON t1.userID = t2.id 
WHERE t2.id IS NULL
DELETE FROM `user-data` t1 
LEFT JOIN `users` t2 ON t1.userID = t2.id 
WHERE t2.id IS NULL
它给出了所有在users表中没有匹配行的行,因为该用户已被删除。但我不能简单地将其转换为删除语句:

SELECT * FROM `user-data` t1 
LEFT JOIN `users` t2 ON t1.userID = t2.id 
WHERE t2.id IS NULL
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
如何删除用户数据中表users中没有现有用户的所有行?

请尝试使用WHERE NOT EXISTS,而不是使用LEFT OUTER JOIN且为NULL。大概是这样的:

DELETE t1
FROM user-data t1
WHERE NOT EXISTS
(
SELECT id FROM FROM users WHERE user-data.userID = users.id)
)
DELETE `user-data`.* FROM `user-data`
LEFT JOIN `users` ON `user-data`.userID = `users`.id 
WHERE `users`.id IS NULL

我似乎记得不能在DELETE中使用表别名。您还可以指定要从中删除的表,如下所示:

DELETE t1
FROM user-data t1
WHERE NOT EXISTS
(
SELECT id FROM FROM users WHERE user-data.userID = users.id)
)
DELETE `user-data`.* FROM `user-data`
LEFT JOIN `users` ON `user-data`.userID = `users`.id 
WHERE `users`.id IS NULL

删除连接查询在MySQL中绝对有效。我认为问题在于删除后没有指定别名。因此,应采取以下措施:

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语句中使用它-Close!它只做了一点修改:从用户数据中删除`WHERE NOT EXISTS从user-data.userID=users.id`ahh yeahh-miss读取它,很高兴它工作了。“不存在的地方通常性能更好”tooYes谢谢-我忘记了那句话:虽然这是有效的,甚至可能是最好的答案,但实际上并没有回答原来的问题。@TimBiegeleisen,true-在删除后添加别名应该可以修复这个问题