2016-06-13 43 views
0

我在JOIN QUERY中遇到了困難,它可能來自我難以掌握的JOIN語法。使用AND子句加入

SELECT * FROM TABLE_A 
JOIN TABLE_B ON TABLE_B.Column1 = TABLE_A.Column1 
      AND (TABLE_B.Column1 + CONVERT(varchar(10), TABLE_B.Column2)) != TABLE_A.Column1 

我需要從兩個表,其中這兩個條件都滿足,但獲得的行目前返回的結果好像和條件甚至不是現在......

任何想法,在實現這一目標?爲了幫助有正確的認識:

Table A   Table B 
ABCD   ABCD  21   Username1 
ABCD21   ABCD  10   Username2 
ABCD       
ABCD    
ABCD21 
ABCD21 

所需的輸出:

Table C 
ABCD  10  Username1 
ABCD  10  Username1 
ABCD  10  Username1 

附:我目前可以做與我的問題相反的是:

SELECT * FROM TABLE_A 
JOIN TABLE_B ON (TABLE_B.Column1 + CONVERT(varchar(10), TABLE_B.Column2)) = TABLE_A.Column1 
+0

問是不是有什麼明確。這甚至不是相反的。這兩個都是Username1。 – Paparazzi

回答

0

的並被評爲
如果第一個條件爲真,則第二個是guaranted是真實的,除非TABLE_B.Column2爲null或空

如果 「一個」= 「一個」
然後 「一」 + 「二」!= 「一個」

ON TABLE_B.Column1           = TABLE_A.Column1 
AND (TABLE_B.Column1 + CONVERT(varchar(10), TABLE_B.Column2)) != TABLE_A.Column1 

每一行上評估自己的

請更好地描述你正在嘗試做

這可能是你想要

SELECT B1.* 
FROM TABLE_A A 
JOIN TABLE_B B1 
     ON B1.Column1 = A.Column1 
LEFT JOIN TABLE_B B2 
     on (B2.Column1 + CONVERT(varchar(10), B2.Column2)) = A.Column1 
WHERE B2.Column1 IS NULL; 

嘗試

on (B2.Column1 + CONVERT(varchar(10), B2.Column2)) != A.Column1 
+0

是的,我同意。你的解釋是有道理的,我的邏輯是有缺陷的! 你可以看看我的文章中的表格以及我想要達到的目標輸出。我會嘗試你的查詢,看看它出了什麼。 – JulioQc

+0

不工作,輸出: 'ABCD 10 Username1' 'ABCD 10 Username1' 'ABCD 10 Username1' 'ABCD 21 Username2' 'ABCD 21 Username2' 'ABCD 21 Username2' – JulioQc

+0

不知道說什麼。如果on(B2.Column1 + CONVERT(varchar(10),B2.Column2))= A.Column1與你想要的相反,那麼它應該工作。 – Paparazzi

0

問題是有多行匹配第一個條件。有些還滿足第二個條件。

我認爲你正在尋找一個left joinwhere條款:

SELECT * 
FROM TABLE_A a LEFT JOIN 
    TABLE_B b 
    ON b.Column1 = a.Column1 AND 
     (b.Column1 + CONVERT(varchar(10), b.Column2)) = a.Column1 
WHERE b.Column1 IS NULL; 
+0

之前沒有成功就跟着領先。我試過了你的查詢但沒有成功;它將返回所有表A行,並將表B中的所有列與空值相加。 – JulioQc