2016-11-23 2 views
0

SQL Server以外で使用すると、どのように異なる列を返すことができますか。SQL Server以外の列を返します

例:別の名前のリターンがある場合、この場合

SELECT ID, NAME FROM TABLE_B 
EXCEPT 
SELECT ID, NAME FROM TABLE_A 

、名前だけの列が表示されます。

+6

あなたはいくつかのサンプルデータと所望の出力を提供することができますか? – Tanner

+0

[この回答](http://stackoverflow.com/a/2077929/5809511)をご覧ください。 –

+0

ID、NAMEはヌル可能ですか? – Serg

答えて

0

コードは正しいです。繰り返される行はありません(ID + NAME!)。

私が正しく理解していれば、名前に集中したいだけです。次いで、選択されたフィールドからIDを削除:

SELECT NAME FROM TABLE_B 
EXCEPT 
SELECT NAME FROM TABLE_A 

[コメントについて、編集:]

これはTABLE_AにないTABLE_Bは異なる行を示しています。これはEXCEPTを使用する目的です。他には、EXCEPTは解決策ではありません。

あなたは、両方のテーブルからすべてのdiferentの名前を探している場合は、あなたが使用することができます。

select distinct NAME 
from 
    (select NAME from TABLE_A 
    UNION 
    select NAME from TABLE_B) as T 
+0

あなたの解決策では、' TABLE_B'から 'TABLE_A'にない名前しか得られません。 'TABLE_A'にちょうど入っている名前はどうですか? –

+0

@diiN_あなたが正しいです。これはTABLE_BからTABLE_Aにない別個の行を表示します。これはEXCEPTを使用する目的です。他には、EXCEPTは解決策ではありません。あなたのコメントについては... @ diiN_多分 (TABLE_A UNIONからNAMEを選択してTABLE_BのNAMEを選択してください)のSELECT distinct NAMEのようなものを探していますが、両方のテーブルから別の名前がす​​べて得られます。 – MarcM

0

フォーム

における第二のテーブル内のフラグ以外の既存のデータの結果セットを取得することができます
ID flag_ID NAME flag_Name 
1 !  A  !     -- No Id=1, no NAME ='A' exists in the second table 
3 NULL NULL !     -- Id=3 exists, no NAME is NULL exists 
4 NULL Y  NULL    -- Both values exist but never in the same row 

必要な条件を満たしてください。 IDがnullではないと仮定すると、

は、NAMEがNULL可能で、NULLが「等しい」と考えるべきである:私は完全にあなたが求めているのか理解していないよう

SELECT b.ID, 
     CASE WHEN NOT EXISTS (SELECT 1 FROM a t2 WHERE t2.ID=b.ID) THEN '!' END flag_ID, 
     b.NAME, 
     CASE WHEN NOT EXISTS (SELECT 1 FROM a t2 
          WHERE ISNULL(NULLIF(b.NAME, t2.NAME), NULLIF(t2.NAME, b.NAME)) IS NULL) 
          THEN '!' END flag_Name 
FROM b 
LEFT JOIN a ON a.ID = b.ID 
    AND ISNULL(NULLIF(a.NAME, b.NAME), NULLIF(b.NAME, a.NAME)) IS NULL 
WHERE a.ID IS NULL 
    OR ISNULL(NULLIF(a.NAME, b.NAME), NULLIF(b.NAME, a.NAME)) IS NOT NULL 
関連する問題