2016-07-23 3 views
0

У меня есть 2 стола.Выберите запрос, за исключением другой таблицы

ТАБЛИЦА 1

ID FRANCHISENAME TELEPHONE FRANCHISE_ID 
1 BURGER   666-555-999  5 
2 JSUBS   666-555-999  7 
3 STEAKS   777-888-999  3 

Таблица 2

ID NAME  TELEPHONE EMAIL   FRANCHISE_ ID 
5 JOHN  555-444-333 [email protected]  5 
5 JOHN  555-444-333 [email protected]  7 
6 EDGARD 555-444-333 [email protected]  9 

Я хочу, чтобы получить все данные в таблице один для тех данных, где пользователь имеет свою электронную почту в таблице 2, за исключением. Например, JOHN имеет franchise_id5 и 7, поэтому запрос будет возвращаться только

3 STEAKS, 777-888-999, 3 
+0

Как эти две таблицы связаны друг с другом? – 1000111

ответ

2

Предполагая, что TABLE_1 & TABLE_2 связаны друг с другом через TABLE_1.FRANCHISE_ID & TABLE_2.FRANCHISE_ID

Вы можете использовать NOT EXISTS

SELECT 
* 
FROM TABLE_1 T1 
WHERE NOT EXISTS(
    SELECT * 
    FROM TABLE_2 T2 
    WHERE T2.FRANCHISE_ID = T1.FRANCHISE_ID 
    AND T2.EMAIL = '[email protected]' 
) 

ИЛИ

Вы можете использовать LEFT JOIN вместе с IS NULL

SELECT 
T1.* 
FROM TABLE_1 T1 
LEFT JOIN TABLE_2 T2 ON T1.FRANCHISE_ID = T2.FRANCHISE_ID 
WHERE T2.FRANCHISE_ID IS NULL; 
+0

Запрос должен иметь где-то table2.email = "[email protected]", поэтому он знает, что он должен вернуть все, кроме этого. –

+0

Я обновил запрос, используя 'NOT EXISTS'. Пожалуйста, проверьте и сообщите. @GerardoBastidas – 1000111

+0

Просто отлично! Большое спасибо. –

0
SELECT t1.* 
FROM 
    Table1 t1 
    LEFT JOIN Table2 t2 
    ON t1.FRANCHISE_ID = t2.FRANCHISE_ID 
    AND LEN(IFNULL(t2.EMAIL,'')) > 0 
WHERE 
    t2.ID IS NULL 

Даже если есть запись в таблице 2, если он не имеет электронной почты он будет возвращен этим запросом. Вы можете указать, скажите, чтобы> 7 или более, чтобы проверить минимальный уровень достоверности адреса электронной почты.

0

Это должно получить вас там, используя функцию NOT IN. Это исключит записи из таблицы 1, если имеется соответствующий Франшиза ID в таблице 2, если поле электронная почта не является Таблица 2 равна нулю:

SELECT * FROM Table1 
WHERE Table1.Franchise_ID NOT IN 
(SELECT Table2.Franchise_ID FROM Table2 
WHERE Table2.Email IS NOT NULL);