使用JOIN从SQL表中删除(SQL)

时间:2014-08-21 17:50:07

标签: mysql sql

DELETE `table1`, `table2` FROM `table1` JOIN `table2` ON table2.col = table1.id WHERE table1.id = 1

如果在table2中没有table2.col = table1.id的结果,那么它的sql查询不起作用。如果table2具有col = table.id的行,那么它可以完美地工作。如何重拍?我需要删除行fom table1,即使在table.col = table1.id的table2行中也不存在。

提前致谢。

3 个答案:

答案 0 :(得分:3)

使用LEFT JOIN

DELETE `table1`, `table2` 
FROM `table1` 
LEFT JOIN `table2` ON table2.col = table1.id 
WHERE table1.id = 1

一般规则是DELETE查询将删除使用相同参数执行SELECT查询时返回的相同行。由于您要在LEFT JOIN中使用SELECT来获取table1中与table2无匹配的行,因此您必须对DELETE执行相同的操作

如果您想安全地测试DELETE,此一般规则也很有用。执行相应的SELECT,并确保它只返回您要删除的行。

答案 1 :(得分:3)

你应该在其他地方使用LEFT JOIN来实现这个目标:

DELETE `table1`, `table2` 
FROM `table1` 
LEFT JOIN `table2` 
ON table2.col = table1.id WHERE table1.id = 1

请查看此处以获取更多文档:

http://www.w3schools.com/sql/sql_join_left.asp

希望它有所帮助。

答案 2 :(得分:2)

您可以尝试使用LEFT JOIN

DELETE `table1`, `table2` 
FROM `table1` LEFT JOIN `table2` ON table2.col = table1.id WHERE table1.id = 1