首頁 >資料庫 >mysql教程 >為什麼我的左連接結果缺少行?

為什麼我的左連接結果缺少行?

Barbara Streisand
Barbara Streisand原創
2025-01-04 09:33:35368瀏覽

Why are Rows Missing from my Left Join Result?

左連接差異:省略行

在此查詢中,表#appSteps 和#appProgress 之間的LEFT JOIN 出現故障,導致從結果集中排除預期行。

查詢問題中:

select p.appId, s.stepId, s.section, p.start
from #appSteps s with (nolock)
left join #appProgress p on s.stepId = p.stepId
where s.section is not null
and p.appId = 101

預期結果:

appId stepId section start
101 1 Section 1 2016-01-03 00:00:00.000
101 2 Section 2 2016-01-03 00:00:00.000
101 10 Section 3 NULL

實際結果:

appId stepId section start
101 1 Section 1 2016-01-03 00:00:00.000
101 2 Section 2 2016-01-03 00:00:00.000

解:

錯誤的行為是由於在WHERE 子句中包含右側表 (#appProgress) 所造成的。透過將此條件移至LEFT JOIN 的ON 子句,可以實現所需的結果:

Select    P.appId, S.stepId, S.section, P.start
From      #appSteps    S   With (NoLock)
Left Join #appProgress P   On  S.stepId = P.stepId 
                           And P.appId = 101
Where     S.section Is Not Null

在LEFT JOIN 中,WHERE 子句在聯接之後執行,這意味著從右開始的行-不符合WHERE 子句條件的手錶將從結果集中排除。在 WHERE 子句中包含右側表格可以有效地將其轉換為 INNER JOIN,從而過濾掉預期結果。

以上是為什麼我的左連接結果缺少行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn