[英]Select query except another table
我有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 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
和7
,因此查询将仅返回
3 STEAKS, 777-888-999, 3
假设TABLE_1
和TABLE_2
通过TABLE_1.FRANCHISE_ID
和TABLE_2.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;
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或更多,以检查电子邮件地址的最低有效性。
这应该使用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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.