Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.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删除查询影响的行数多于选择查询_Mysql - Fatal编程技术网

MySQL删除查询影响的行数多于选择查询

MySQL删除查询影响的行数多于选择查询,mysql,Mysql,我有一个SELECT查询,返回45行 SELECT * FROM pages as p INNER JOIN mdata as m WHERE m.pid = p.id AND (m.key LIKE "%RMY%" OR p.type = "page" OR p.type = "parent" OR p.type = "sub") 然后,当我使用这个删除查询时,它会

我有一个SELECT查询,返回45行

SELECT *
FROM pages as p
INNER JOIN mdata as m
WHERE m.pid = p.id AND
      (m.key LIKE "%RMY%" OR p.type = "page" OR
                  p.type = "parent" OR p.type = "sub")
然后,当我使用这个删除查询时,它会说64行受影响:

DELETE m,p
FROM pages as p
INNER JOIN mdata as m
WHERE m.pid = p.id AND
     (m.key LIKE "%RMY%" OR p.type = "page" OR
                 p.type = "parent" OR p.type = "sub")
不确定我的删除查询中是否有错误


是否有方法返回已删除的行,以便我可以检查哪些行正在被删除?

我认为这是正确的查询:

DELETE m,p
FROM pages as p
INNER JOIN mdata as m
ON m.pid = p.id WHERE
     (m.key LIKE "%RMY%" OR p.type  IN("page", "parent","sub"))

为什么要将连接条件放在
WHERE
子句中,而不是将
ON
子句与
m.pid=p.id
分开?在任何情况下,我只能通过假设基础数据在运行select和delete之间发生变化来解释您的观察结果。@TimBiegeleisen我尝试了单独的ON子句,但没有成功。否,我的选择和删除查询之间没有数据更改。我还在我的测试站点上测试了这个,没有任何实时数据更改。有没有办法在MySQL中返回已删除的行?要回答这个问题,我们需要看到所有相关表的showcreatetable语句,以及任何TRIGGERSDelete查询都在从这两个表中删除行。是否要从这两个表中删除?例如:在从select查询接收到的45行中,第一个表中可以有45行,另一个表中可以有19行与这45行连接(同一行多次连接)。这就是删除时删除45+19行的原因。但在选择后联接时,您总共得到45行。我实际上也尝试过这种变化。它仍然显示“64行受影响”。