MySQL删除查询影响的行数多于选择查询
我有一个SELECT查询,返回45行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 *
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行受影响”。