Mysql 我不能运行这个查询,但是当我在phpmyadmin中模拟它时,它会返回行
我将删除一个名为sy_user的表中的一些行。我想删除另一个表中不匹配的一些行,即tb_master_pegawai 如何解决此查询,使用子查询作为WHERE条件执行行删除 我使用子查询作为删除查询中的WHERE条件。当我在phpmyadmin中运行它时,它说 无法在FROM子句中为更新指定目标表“sy_user” 但当我模拟它时,它有返回行Mysql 我不能运行这个查询,但是当我在phpmyadmin中模拟它时,它会返回行,mysql,sql,Mysql,Sql,我将删除一个名为sy_user的表中的一些行。我想删除另一个表中不匹配的一些行,即tb_master_pegawai 如何解决此查询,使用子查询作为WHERE条件执行行删除 我使用子查询作为删除查询中的WHERE条件。当我在phpmyadmin中运行它时,它说 无法在FROM子句中为更新指定目标表“sy_user” 但当我模拟它时,它有返回行 DELETE FROM sy_user WHERE user_id NOT IN (SELECT tbp
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)
我希望结果是我删除了与另一个表中的相同数据不匹配的行。您可以仅使用左联接简化请求:
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
不能在删除/更新查询的子查询中引用要从中删除的表。相反,使用左联接并检查联接表的空值,这意味着它没有与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
不能在删除/更新查询的子查询中引用要从中删除的表。是的,你可以用一个简单的技巧把它再嵌套一次。。其中用户id不在SELECT tbpeg.id的SELECT id中。。。a,那么MySQL应该允许这样做,但是左连接应该比共相关子查询执行得更好。.呃,嵌套选择作弊,这不是我喜欢的方式:D你是对的,如果我没有弄错的话,它只检查第一个子查询,而不是子查询。。但我会避免这种情况,而是使用左连接。所以说你不能使用子查询并不是完全错误的,但是你可以使用子查询。。ANSI/ISO理想情况下应该在SQL规范中或多或少添加一些东西,比如外部[RELATION]检查表达式/查询,以使更新/删除依赖于可能的其他表,但这是我的观点,我同意。通过外键确保数据完整性非常简洁方便!。我不明白这个问题。你能帮我吗@奇雷尔