2016-11-10 3 views
0

EXCEPT/MINUSを使用して、2つのテーブル間の行/カラムが一致しているかどうかを比較しています。所定の行については、例えば、 col2が一致しない場合、col1の不一致がないので、col1の値を無視した場合はcol2のみを出力するか、nullを表示したいとします。 SQLだけでそれを行う方法はありますか?上記のSQLを適用EXCEPTを使用するときに特定の不一致カラムを取得する方法

表1

| col1 | col2 | 
| A | B | 
| X | Y | 
| M | N | 

表2

| col1 | col2 | 
| A | Z | 
| X | Y | 
| 1 | N | 

| col1 | col2 | 
| A | B | 
| M | N | 

を生成しかし、私が必要な場合がありますことは、以下のように唯一の不一致の値です。

| col1 | col2 | 
|  | B | 
| M |  | 
+2

質問を編集し、(1)サンプルデータを提供してください。 (2)所望の結果; (3)使用しているデータベースのタグ。 –

+1

現在、あなたが求めているものは明確ではありません。 –

+0

これが当てはまる場合、** col1は常にNULL **になります。別のシナリオがありますか?** Col1が**と一致しない場合、** col2はnull **ですか? – Viki888

答えて

1

あなたは、これはあなたの問題を解決する必要があり、この

SELECT CASE 
     WHEN T2.COL1 IS NULL OR T1.col1 <> T2.col1 THEN T1.col1 
     END COL1, 
     CASE 
     WHEN T2.COL2 IS NULL OR T1.col2 <> T2.col2 THEN T1.col2 
     END COL2 
FROM table1 T1 
     LEFT JOIN table2 T2 
     ON (T1.col1 = T2.col1 
      OR T1.col2 = T2.col2) 
      AND (T1.col1 <> T2.col1 
        OR T1.col2 <> T2.col2); 

希望を試すことができます。

+0

このアプローチは私の問題には完璧です – Bala

関連する問題