我无法运行此查询,但是当我在phpmyadmin中对其进行仿真时,它将返回行

时间:2019-08-27 08:22:25

标签: mysql sql

我将删除我的一个名为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)

我希望结果是我删除了另一张表中与相同数据不匹配的行。

2 个答案:

答案 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