Подтвердить что ты не робот

Как я могу присоединиться к двум таблицам, но только возвращать строки, которые не совпадают?

У меня есть две таблицы, которые выглядят так:

T1:  ID  |  Date  |  Hour  | Interval
T2:  ID  |  Date  |  Hour

Мне в основном нужно присоединяться к этим таблицам, когда совпадают их идентификаторы, даты и часы. Тем не менее, я хочу только вернуть результаты из таблицы 1, которые не совпадают с результатами в таблице 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. Может ли кто-нибудь указать мне правильный путь?

4b9b3361

Ответ 1

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

Ответ 2

Используйте 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