2012-09-20 132 views
2

http://dev.mysql.com/doc/refman/5.5/en/left-join-optimization.html一個可以讀取:LEFT JOIN和IS NULL效果

如果使用LEFT JOIN來查找不以某種表存在, 您在下面的測試行:COL_NAME在WHERE NULL部分,其中 col_name是一個聲明爲NOT NULL的列,在 找到一行符合LEFT JOIN條件後,MySQL停止 搜索更多行(針對特定組合鍵)。

任何人都可以解釋我在人類可讀語言中的含義嗎?或以新手可讀的語言;)

回答

1

即使在右手錶中沒有與連接條件相匹配的行,左連接始終會爲左手錶中的每一行連接右側表中的至少一行。如果發生這種情況,那麼該行右側表中的列將全部爲空。

這意味着執行左連接,然後在右表列中測試null(在not null列中)是測試連接表中沒有對應行的行的有效方法。

您引用的摘錄是說,當執行查詢這個表單時,一旦第一個表被連接,就停止連接更多行(因爲這會浪費時間要做到這一點 - 你已經清楚地表明你正在尋找右側表中沒有匹配的行,所以一旦找到至少一個行就找不到更多行)。

2

只有在右表上沒有匹配的行纔會被返回。

enter image description here

正如你所看到的,有被連接的兩個表:這可以作爲說明。陰影部分是Table B上不存在的記錄。