簡體   English   中英

MySQL - 兩個語句之間的區別

[英]MySQL - Difference between two statements

我在文檔中注意到了這個 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 會很重要。

但也許我沒有抓住重點?

任何幫助表示贊賞。

提前致謝。

你錯過了一些東西。 db-fiddle 第一條 SQL 不僅會更新uid 5 的行,還會更新其子、孫和曾孫(如果存在)。

它們是不同的,因為第一個查詢更新pid=5uid=5行的所有子行、孫子行和孫子行。 第二個將只更新行本身。

以下是查詢如何不同的示例:

|uid|pid| first query                 | second query     |
| 1 | 5 | Yes, page.pid=5             | Yes. page.pid=5  |
| 5 | 6 | Yes, page.uid=5             | Yes. page.uid=5  |
| 6 | 7 | Yes, parentpage.pid=5       | No               |
| 7 | 8 | Yes, grapdppage.pid=5       | No               |
| 8 | 9 | Yes, grandgrandppage.pid=5  | No               |
| 9 | 10| No                          | No               |

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM