アプリケーション、オーディオ、ビデオの 3 つのテーブルを結合しようとしています。それらはすべて同じスキーマを持っていますが、オーディオとビデオには「重複」があります。ビデオのエントリは常にオーディオにも表示されます。行全体が重複しているのではなく、3 つのフィールドに基づいているため、重複を引用符で囲みます。
オーディオテーブル
**Calls | StartTime | EndTime | Quality | CallType**
John | 3/15/16 8:01 | 3/15/16 9:01 | 0 | Audio
Mary | 3/15/16 9:35 | 3/15/16 10:34 | 1 | Audio
ビデオテーブル
**Calls | StartTime | EndTime | Quality | CallType**
John | 3/15/16 8:01 | 3/15/16 9:01 | 1 | Video
Sue | 3/15/16 11:32 | 3/15/16 11:50 | 0 | Video
アプリケーション表
**Calls | StartTime | EndTime | Quality | CallType**
Matt | 3/15/16 7:31 | 3/15/16 8:01 | 1 | App
Bill | 3/15/16 1:32 | 3/15/16 2:50 | 0 | App
そして、重複がある場合にビデオからのデータを保持する 1 つのテーブルにそれらを結合したいので、ビデオ テーブルからの品質とコールタイプで、ジョンが 1 回だけ表示されることがわかります。
**Calls | StartTime | EndTime | Quality | CallType**
Mary | 3/15/16 9:35 | 3/15/16 10:34 | 1 | Audio
John | 3/15/16 8:01 | 3/15/16 8:01 | 1 | Video
Sue | 3/15/16 11:32 | 3/15/16 11:50 | 0 | Video
Matt | 3/15/16 7:31 | 3/15/16 8:01 | 1 | App
Bill | 3/15/16 1:32 | 3/15/16 2:50 | 0 | App
EXCEPT と UNION を使用して、ビデオに表示されないオーディオのすべての行を選択してからビデオに結合しようとしていましたが、calltype が常に異なり、品質が異なる可能性があるため、それらが一意であると見なされているためです。
SELECT Calls, StartTime, EndTime, Quality, CallType
FROM Audio
EXCEPT
SELECT Calls, StartTime, EndTime, Quality, CallType
FROM Video
UNION
SELECT Calls, StartTime, EndTime, Quality, CallType
FROM Video
UNION
SELECT Calls, StartTime, EndTime, Quality, CallType
FROM Application