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行中也不存在。
提前致谢。
答案 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