SQL Server以外で使用すると、どのように異なる列を返すことができますか。SQL Server以外の列を返します
例:別の名前のリターンがある場合、この場合
SELECT ID, NAME FROM TABLE_B
EXCEPT
SELECT ID, NAME FROM TABLE_A
、名前だけの列が表示されます。
SQL Server以外で使用すると、どのように異なる列を返すことができますか。SQL Server以外の列を返します
例:別の名前のリターンがある場合、この場合
SELECT ID, NAME FROM TABLE_B
EXCEPT
SELECT ID, NAME FROM TABLE_A
、名前だけの列が表示されます。
コードは正しいです。繰り返される行はありません(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
あなたの解決策では、' TABLE_B'から 'TABLE_A'にない名前しか得られません。 'TABLE_A'にちょうど入っている名前はどうですか? –
@diiN_あなたが正しいです。これはTABLE_BからTABLE_Aにない別個の行を表示します。これはEXCEPTを使用する目的です。他には、EXCEPTは解決策ではありません。あなたのコメントについては... @ diiN_多分 (TABLE_A UNIONからNAMEを選択してTABLE_BのNAMEを選択してください)のSELECT distinct NAMEのようなものを探していますが、両方のテーブルから別の名前がすべて得られます。 – MarcM
フォーム
における第二のテーブル内のフラグ以外の既存のデータの結果セットを取得することができます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
あなたはいくつかのサンプルデータと所望の出力を提供することができますか? – Tanner
[この回答](http://stackoverflow.com/a/2077929/5809511)をご覧ください。 –
ID、NAMEはヌル可能ですか? – Serg