Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 我不能运行这个查询,但是当我在phpmyadmin中模拟它时,它会返回行_Mysql_Sql - Fatal编程技术网

Mysql 我不能运行这个查询,但是当我在phpmyadmin中模拟它时,它会返回行

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

我将删除一个名为sy_user的表中的一些行。我想删除另一个表中不匹配的一些行,即tb_master_pegawai

如何解决此查询,使用子查询作为WHERE条件执行行删除

我使用子查询作为删除查询中的WHERE条件。当我在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)

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

您可以仅使用左联接简化请求:

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]检查表达式/查询,以使更新/删除依赖于可能的其他表,但这是我的观点,我同意。通过外键确保数据完整性非常简洁方便!。我不明白这个问题。你能帮我吗@奇雷尔