次のような2つのテーブルがあります。
T1: ID | Date | Hour | Interval
T2: ID | Date | Hour
ID、日付、および時間が一致する場合、基本的にこれらのテーブルを結合する必要があります。ただし、表1からnotが表2の結果と一致する結果のみを返します。
これは単純に思えますが、私が行き詰まっているのは、テーブル1にテーブル2と一致する複数の行があるという事実です(任意の時間に複数の間隔があります)。表2の同じ時間内に収まらない限り、これらすべての間隔を返す必要があります。
サンプルデータ:
T1: 1 | 1/1/2011 | 1 | 1
1 | 1/1/2011 | 1 | 2
1 | 1/1/2011 | 2 | 1
1 | 1/1/2011 | 2 | 2
T2: 1 | 1/1/2011 | 1
これに対して期待される結果セットは、T1
の最後の2行です。誰かが私を正しい方向に向けることができますか?
SELECT T1.*
FROM T1
WHERE NOT EXISTS(SELECT NULL
FROM T2
WHERE T1.ID = T2.ID
AND T1.Date = T2.Date
AND T1.Hour = T2.Hour)
LEFT JOIN
でも実行できます。
SELECT T1.*
FROM T1
LEFT JOIN T2
ON T1.ID = T2.ID
AND T1.Date = T2.Date
AND T1.Hour = T2.Hour
WHERE T2.ID IS NULL
使う LEFT JOIN
および非NULL
T2列を持つ行をフィルターで除外します。
SELECT T1.* FROM T1 LEFT JOIN T2 ON T1.ID = T2.ID
AND T1.Date = T2.Date AND T1.Hour = T2.Hour
WHERE T2.ID IS NULL