簡體   English   中英

選擇除另一個表以外的查詢

[英]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 57 ,因此查詢將僅返回

3 STEAKS, 777-888-999, 3

假設TABLE_1TABLE_2通過TABLE_1.FRANCHISE_IDTABLE_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 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;
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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM