2014-12-02 46 views
1

美好的一天,SQL服務器LEFT JOIN沒有給予正確的結果

我看過一些人正面臨着左連接,不給正確的結果,也許我不理解所有問題的答案是很好的其他問題。

這裏是我在我的查詢有問題

SELECT 
     TA.column1 
     ,D.column2 
     ,D.column3 
     ,TA.column4 
     ,MI.[column5] 
     ,MI.[column6] 
     ,D.[column7] 
     ,D.[column8] 
     ,TA.[column9] 
     ,TA.[column10] 
     ,UC.[column11] 
     ,UC.[column12] 
     ,TA.[column13] 
     ,TA.[column14] 
     ,TA.[column15] 
     ,TA.[column16] 
     ,TA.[column17] 
     ,'0' AS column18 
     ,TA.[column19] 
     ,'12.2' AS column20 
     ,'None' AS column21 
     ,'0' AS column22 
     ,'1' AS column23 
     ,TA.[column24] 
     ,'0' AS column25 
     ,'0' AS column26 
     ,LD.column27 
    FROM [DB].[dbo].[Table1] AS TA WITH (NOLOCK) 
    FULL OUTER JOIN 
    [DB].[dbo].[Table2] AS LD WITH (NOLOCK) 
    ON 
    TA.[coulmn1]=LD.[coulmn5] 
    INNER JOIN 
    [DB].[dbo].[Table3] AS MI WITH (NOLOCK) 
    ON 
    TA.coulmn10 = MI.[coulmn3] 
    LEFT JOIN 
    [DB].[dbo].[Table4] AS D WITH (NOLOCK) 
    ON 
    TA.coulmn25 = D.coulmn1 
    INNER JOIN 
    [DB1].[dbo].[Table5] AS UC WITH (NOLOCK) 
    ON 
    TA.coulmn12 = UC.coulmn3 

    WHERE 
    (LD.coulmn5 != TA.[coulmn1]) 
    AND 
    (TA.[coulmn23]= '0') 

的問題是,當我更新查詢和刪除

FULL OUTER JOIN 
    [DB].[dbo].[Table2] AS LD WITH (NOLOCK) 
    ON 
    TA.[coulmn1]=LD.[coulmn5] 

以及刪除以下where子句:

WHERE 
    (LD.coulmn5 != TA.[coulmn1]) 
    AND 

我在右邊的桌子上有3個結果。這是正確的,因爲一個結果沒有被寫入左表

當我放回左外連接和where子句我只看到2個結果再次,應該沒有三個結果與最後一列,LD.column27顯示爲NULL。 這一欄是接受NOT NULL這可能是我沒有得到優先結果的原因嗎?

+0

在查詢中,只有在所有內部聯接完成正確結果後,才應使用所有左側聯接,否則在左側聯接之前使用的所有內部聯接將僅視爲左側聯接。 – Mudassir 2014-12-02 07:31:24

回答

0

使用LEFT OUTER JOIN代替FULL OUTER JOIN和刪除'WHERE(!LD.coulmn5 = TA.coulmn1])和」部分

試試這個:

SELECT 
     TA.column1 
     ,D.column2 
     ,D.column3 
     ,TA.column4 
     ,MI.[column5] 
     ,MI.[column6] 
     ,D.[column7] 
     ,D.[column8] 
     ,TA.[column9] 
     ,TA.[column10] 
     ,UC.[column11] 
     ,UC.[column12] 
     ,TA.[column13] 
     ,TA.[column14] 
     ,TA.[column15] 
     ,TA.[column16] 
     ,TA.[column17] 
     ,'0' AS column18 
     ,TA.[column19] 
     ,'12.2' AS column20 
     ,'None' AS column21 
     ,'0' AS column22 
     ,'1' AS column23 
     ,TA.[column24] 
     ,'0' AS column25 
     ,'0' AS column26 
     ,LD.column27 
    FROM [DB].[dbo].[Table1] AS TA WITH (NOLOCK) 
    LEFT OUTER JOIN [DB].[dbo].[Table2] AS LD WITH (NOLOCK) ON TA.[coulmn1]=LD.[coulmn5] 
    INNER JOIN [DB].[dbo].[Table3] AS MI WITH (NOLOCK) ON TA.coulmn10 = MI.[coulmn3] 
    LEFT JOIN [DB].[dbo].[Table4] AS D WITH (NOLOCK) ON TA.coulmn25 = D.coulmn1 
    INNER JOIN [DB1].[dbo].[Table5] AS UC WITH (NOLOCK) ON TA.coulmn12 = UC.coulmn3 
    WHERE (TA.[coulmn23]= '0') 
+0

否仍然只有在兩個表中都有數據的情況下才能看到結果 – user3676496 2014-12-02 07:21:06

+0

@ user3676496您能否用樣本數據解釋? – 2014-12-02 07:23:33

0

應該工作:

SELECT 
    TA.column1 
    ,D.column2 
    ,D.column3 
    ,TA.column4 
    ,MI.[column5] 
    ,MI.[column6] 
    ,D.[column7] 
    ,D.[column8] 
    ,TA.[column9] 
    ,TA.[column10] 
    ,UC.[column11] 
    ,UC.[column12] 
    ,TA.[column13] 
    ,TA.[column14] 
    ,TA.[column15] 
    ,TA.[column16] 
    ,TA.[column17] 
    ,'0' AS column18 
    ,TA.[column19] 
    ,'12.2' AS column20 
    ,'None' AS column21 
    ,'0' AS column22 
    ,'1' AS column23 
    ,TA.[column24] 
    ,'0' AS column25 
    ,'0' AS column26 
    ,LD.column27 
FROM [DB].[dbo].[Table1] AS TA WITH (NOLOCK) 
FULL OUTER JOIN 
    [DB].[dbo].[Table2] AS LD WITH (NOLOCK) 
    ON 
TA.[coulmn1]=LD.[coulmn5] 
INNER JOIN 
[DB].[dbo].[Table3] AS MI WITH (NOLOCK) 
ON 
TA.coulmn10 = MI.[coulmn3] 
LEFT JOIN 
[DB].[dbo].[Table4] AS D WITH (NOLOCK) 
ON 
TA.coulmn25 = D.coulmn1 
INNER JOIN 
[DB1].[dbo].[Table5] AS UC WITH (NOLOCK) 
ON 
TA.coulmn12 = UC.coulmn3 

WHERE 
(LD.coulmn5 is null) 
AND 
(TA.[coulmn23]= '0') 
+0

我發現該查詢的問題,爲什麼它不能正常工作,只要我刪除 INNER JOIN [DB1] [DBO]。[表5] AS UC WITH(NOLOCK) ON TA.coulmn12 = UC。 coulmn3 然後數據在那裏,當我再次添加它時,我得到沒有結果回來可以,因爲我加入到我的查詢不同的數據庫? – user3676496 2014-12-02 09:32:19

+0

這是因爲你的數據的性質。嘗試更改Table5左連接的內連接並查看會發生什麼。 – 2014-12-02 09:39:26

+0

它正在工作,它是由Dmitry和Saharsh提供的答案的混合物,在我得到DB2連接後不給我結果我刪除了「WHERE(LD.coulmn5 is null)」只剩下了「WHERE(TA。[coulmn23] ='0')「現在數據正確顯示謝謝你們的幫助。 – user3676496 2014-12-04 08:27:58