0

私は2つのテーブルを持っています。TableATableB。両方のテーブルには、以下のように 2 つの列を持つデータがあります。

TableA
---------
id  Name
--- ----
1   abc
2   def

TableB
---------
id  Name
--- ----
1   xyz
2   pqr

クエリ:

select id, name 
from TableA 
union
select id, name 
from TableB;

要件は次のとおりです。以下の基準を満たすクエリが必要です。

  1. TableA に TableB にないデータがある場合、TableA のデータを返す必要があります
  2. TableB に TableA にないデータがある場合、TableB のデータを返す必要があります
  3. 両方のテーブルで同じ ID のレコードが見つかった場合、TableB のデータを返す必要があります。

クエリをどのように記述できますか?

4

3 に答える 3

2

ユニオンの代わりに外部結合を使用してこれを行うことができます。

select coalesce(TableA.id, TableB.id),
       coalesce(TableB.name, TableA.name)
    from TableA 
    full outer join TableB on
       TableA.id = TableB.id;

coalescenull ではないリストから最初の引数を選択します

于 2013-03-07T15:23:42.893 に答える
2

あなたのクエリは (3) を満たしていません。

が nullable ではないと仮定するとid、次のように書くことができます。

SELECT id, name
  FROM tableB
 UNION ALL
SELECT id, name
  FROM tableA a
 WHERE a.id NOT IN (SELECT b.id
                      FROM tableB);
于 2013-03-07T15:26:15.753 に答える
1
SELECT [id], [Name]
FROM TableB

UNION

SELECT [id], [Name]
FROM TableA
WHERE [id] NOT IN (SELECT [id] FROM [TableB]

UNION重複を自動的に除外します。TableB変更する必要があるのは、最初から選択することだけです。

編集:申し訳ありませんが、あなたの質問を完全に読んでいないと思います。以下のコメントに基づいて回答を編集しました。

于 2013-03-07T15:22:39.043 に答える