2016-06-13 18 views
0

JOIN QUERYで苦労しています.JOIN構文を把握するのが難しいかもしれません。JOIN ON with AND節

これを実現する上の任意のアイデア

...私は両方のこれらの条件が満たされ、両方のテーブルから行を取得する必要がありますが、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 

P.S.コンテキストに入れて支援するために、私は現在、私の質問の反対を行うことができます:

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

質問ではありませんてみたいものかもしれ明らかです。それは逆でもありません。両方でUsername1になります。 – Paparazzi

答えて

0

。アンド評価され
最初の条件がtrueの場合TABLE_B.Column2がnullでない限り、2番目は真であるとguarantedしますさまたは空

であれば "1" = "1"
し、 "1" + "2"!= "1"

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

は知ってはいけませんなんて言うか。オンの場合(B2.Column1 + CONVERT(varchar(10)、B2.Column2))= A.Column1は、それがうまくいくはずです。 – Paparazzi

0

問題は、最初の条件に一致する複数の行があることです。また、第2の条件を満たすものもある。

は、私はあなたがwhere句でleft joinを探していると思う:

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のすべての列をNULL値で追加します。 – JulioQc