我将删除我的一个名为sy_user
的表中的某些行。我要删除其他表tb_master_pegawai
中不匹配的某些行。
如何解决此查询以使用子查询作为WHERE
条件来删除行?
我将子查询用作WHERE
查询中的DELETE
条件。
当我在phpmyadmin中运行它时,它说
您不能在FROM子句中指定目标表“ sy_user”进行更新
但是当我模拟它时,它具有返回行。
DELETE FROM sy_user
WHERE user_id NOT IN
(SELECT tbpeg.ID
FROM tb_master_pegawai AS tbpeg
JOIN sy_user AS tbuser ON tbpeg.ID=tbuser.user_id)
我希望结果是我删除了另一张表中与相同数据不匹配的行。
答案 0 :(得分:2)
您无法在DELETE
/ UPDATE
查询的子查询中引用要从中删除的表。而是使用LEFT JOIN
并检查联接表在NULL
的位置(这意味着它没有符合ON
条件的行)。
在测试事务时尝试在事务中运行删除查询,这样,如果查询删除的行超出预期,则可以回滚。
DELETE u
FROM sy_user AS u
LEFT JOIN tb_master_pegawai AS tp
ON tp.ID = u.user_id
WHERE tp.ID IS NULL
答案 1 :(得分:0)
您可以仅使用LEFT JOIN来简化请求:
DELETE sy_user FROM sy_user
LEFT JOIN tb_master_pegawai ON sy_user.user_id = tb_master_pegawai.ID
WHERE tb_master_pegawai.ID IS NULL