4

SQL に 2 つのテーブルがあるとします。

Table_Alpha   Table_Bravo
Id | Name     Id | Name
---+------    ---+-----
 1 | Alice     1 | Charlie
 2 | Bob       2 | Bob
 3 | Charlie   3 | Dorothy

2 つのテーブルを 1 つのテーブルに結合して、重複を避け、各名前がどのテーブルから来たかを次のように追跡したいと考えています。

Result
Name   | Alpha | Bravo
-------+-------+------
Alice  |   1   |   0  
Bob    |   1   |   1  
Charlie|   1   |   1  
Dorothy|   0   |   1  

必要なクエリは次のようになると思います。

SELECT Name, 1 AS Alpha, 0 AS Bravo FROM Table_Alpha
UNION
SELECT Name, 0 AS Alpha, 1 AS Bravo FROM Table_Bravo;

ただし、上記のクエリは、両方のテーブルに表示される名前ごとに 2 つの行を返します。個別の名前ごとに 1 つの行を返すようにクエリを作成するにはどうすればよいですか?

4

2 に答える 2

4

これは機能しますか?

SELECT DISTINCT Name, sum(Alpha) as 'Alpha', sum(Bravo) as 'Bravo'
FROM (
    SELECT Name, 1 as Alpha, 0 as Bravo from Table_Alpha
    UNION
    SELECT Name, 0 as Alpha, 1 as Bravo from Table_Bravo
) X
GROUP BY Name
于 2013-05-08T19:57:25.897 に答える
0

a を使用できFULL JOINName列に重複がない場合は noGROUP BYは必要ありません。

SELECT
    COALESCE(a.Name, b.Name),
    CASE WHEN a.Name IS NOT NULL THE 1 ELSE 0 END AS Alpha,
    CASE WHEN b.Name IS NOT NULL THE 1 ELSE 0 END AS Bravo
FROM
    Table_Alpha AS a
  FULL JOIN
    Table_Bravo AS b
      ON a.Name = b.Name ; 

重複がある場合:

SELECT
    COALESCE(a.Name, b.Name),
    COUNT(a.Name) AS Alpha,
    COUNT(b.Name) AS Bravo
FROM
    Table_Alpha AS a
  FULL JOIN
    Table_Bravo AS b
      ON a.Name = b.Name 
GROUP BY 
    COALESCE(a.Name, b.Name) ; 
于 2013-05-08T20:18:10.867 に答える