0

2 つのデータ セットを比較し、2 つのセットの完全結合を表示し、行がセット 1、セット 2、またはその両方に表示されるかどうかを示す列を追加したいと考えています。私はT-SQLで働いています

Table A  
|[ID] | [Movie] | [Year] |  
|-----|---------|--------|  
| 1   | Movie1  | Year1  |  
| 2   | Movie2  | Year2  |  
| 3   | Movie3  | Year3  |   

Table B  
|[ID] | [Movie] | [Year] |   
|-----|---------|--------|  
| 2   | Movie2  | Year2  |  
| 3   | Movie3  | Year3  |  
| 4   | Movie4  | Year4  |   


Desired Result:  
|[ID] | [Movie] | [Year] | [In Set A?] | [In Set B?] |  
|-----|---------|--------|-------------|-------------|  
| 1   | Movie1  | Year1  |    Yes      |     No      |  
| 2   | Movie2  | Year2  |    Yes      |     Yes     |  
| 3   | Movie3  | Year3  |    Yes      |     Yes     |  
| 4   | Movie4  | Year4  |    No       |     Yes     |  

これはSQLで達成できますか? 追加された列を、出力が A、B、または両方の 1 列だけにすることにしました。

4

2 に答える 2

1

FULL JOIN と COALESCE を使用できます。これは、ID で参加できることを前提としています。

SELECT COALESCE(a.ID,b.ID)as ID
     , COALESCE(a.Movie,b.Movie) as Movie
     , COALESCE(a.Year,b.Year) as Year
     , CASE WHEN a.ID IS NULL THEN 'NO' ELSE 'YES' END as InSetA
     , CASE WHEN b.ID IS NULL THEN 'NO' ELSE 'YES' END as InSetB
FROM TableA a
FULL JOIN TableB b
 ON a.ID = b.ID

デモ: SQL フィドル

最後の部分を 1 つのフィールドに結合することもできます。

SELECT COALESCE(a.ID,b.ID)as ID
     , COALESCE(a.Movie,b.Movie) as Movie
     , COALESCE(a.Year,b.Year) as Year
     , CASE WHEN a.ID IS NULL THEN 'In B Only'
            WHEN b.ID IS NULL THEN 'In A Only'
            ELSE 'In Both'
       END as InTable    
FROM TableA a
FULL JOIN TableB b
 ON a.ID = b.ID
于 2013-06-21T02:00:40.183 に答える
1

でこれを行うことができますunion all

select id, movie, year,
       (case when max(inA) = 1 then 'Yes' else 'No' end) as inA,
       (case when max(inB) = 1 then 'Yes' else 'No' end) as inB
from ( select id, movie, year, 1 as InA, 0 as InB
       from tableA
       union all
       select id, movie, year, 0, 1
       from tableB
     ) t
group by id, movie, year

これは、ソリューションとは少し異なりfull outer joinます。いずれかのテーブルに重複がある場合、そのソリューションは行を増やすことができます。このソリューションは、テーブル内であっても重複を削除するため、複数の行が 1 行に縮小されます。

于 2013-06-21T02:09:02.393 に答える