选择除另一个表之外的查询

时间:2016-07-23 17:18:20

标签: mysql sql database

我有两张桌子。

表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  JOHN@GMAIL.COM       5
5   JOHN     555-444-333  JOHN@GMAIL.COM       7
6   EDGARD   555-444-333  EDGARD@GMAIL.COM     9

我想检索表1中的所有数据,但用户在表2中显示其电子邮件的数据除外。例如JOHNfranchise_id 5和{{1所以查询只返回

7

3 个答案:

答案 0 :(得分: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 = 'JOHN@GMAIL.COM'
)

您可以将LEFT JOINIS 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;

答案 1 :(得分: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或更多,以检查电子邮件地址的最低有效性。

答案 2 :(得分:0)

这应该可以使用NOT IN功能。如果表2中存在匹配的特许经营ID,它将排除表1中的记录,除非电子邮件字段为表2为空:

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