我有两张桌子。
表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中显示其电子邮件的数据除外。例如JOHN
有franchise_id
5
和{{1所以查询只返回
7
答案 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 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;
答案 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);