J'ai deux tableaux qui ressemblent à ceci:
T1: ID | Date | Hour | Interval
T2: ID | Date | Hour
J'ai essentiellement besoin de rejoindre ces tables lorsque leurs identifiants, dates et heures correspondent. Cependant, je veux seulement renvoyer les résultats du tableau 1 qui correspondent pas avec les résultats du tableau 2.
Je sais que cela semble simple, mais là où je suis bloqué, c'est le fait qu'il y a plusieurs lignes dans le tableau 1 qui correspondent au tableau 2 (il y a plusieurs intervalles pour une heure donnée). Je dois renvoyer tous ces intervalles tant qu'ils ne correspondent pas à la même période horaire dans le tableau 2.
Exemples de données:
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
Mon jeu de résultats attendu pour cela serait les deux dernières lignes de T1
. Quelqu'un peut-il me diriger sur la bonne voie?
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)
Cela pourrait aussi être fait avec un 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
Utiliser un LEFT JOIN
et filtrer les lignes qui ont des colonnes non -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