【发布时间】:2020-09-28 17:04:48
【问题描述】:
我在文档中注意到了这个 SQL 查询:
UPDATE pages page
LEFT JOIN pages parentpage ON page.pid = parentpage.uid
LEFT JOIN pages grandparentpage ON parentpage.pid = grandparentpage.uid
LEFT JOIN pages grandgrandparentpage ON grandparentpage.pid = grandgrandparentpage.uid
SET page.is_hidden = 0
WHERE page.uid = 5
OR page.pid = 5
OR parentpage.pid = 5
OR grandparentpage.pid = 5
OR grandgrandparentpage.pid = 5;
这不完全一样:
UPDATE pages page
SET page.is_hidden = 0
WHERE page.uid = 5
OR page.pid = 5;
PID 和 UID 被 where 子句过滤为等于 5。因此我不明白,为什么这个 JOIN 很重要。
但也许我没有抓住重点?
感谢任何帮助。
提前致谢。
【问题讨论】:
-
在更新时左连接是一件奇怪的事情
-
这不完全一样否。创建 4 个链式行,其中只有
grandgrandparentpage.pid = 5并比较这些查询的结果。第一次查询将更新所有行,而第二次仅更新 2 行。 -
@Strawberry 为什么不呢?想象一下只有一行
uid = 5,它必须(未)标记为隐藏。只有最左边的表被更新... -
似乎您正在处理本质上是分层的数据。在修改任何现有文档时,我会格外小心。 2个更新语句不一样。第一个使用左连接来模拟更新的子父关系
-
详细解释参考权威文档l为什么你期望你所期望的或者我们无法解决你的误解。