我有三個不同的表格 - 訂閱者,取消訂閱者,批量訂閱者。Mysql查詢不存在
我想從羣發訂戶表中打印出每封電子郵件。但是,只有在訂戶和非訂戶表中都不存在該電子郵件才能打印。
我知道如何做到這一點與數組,但是我想要一個普通的mysql查詢。
mysql查詢會是什麼?
謝謝!
我有三個不同的表格 - 訂閱者,取消訂閱者,批量訂閱者。Mysql查詢不存在
我想從羣發訂戶表中打印出每封電子郵件。但是,只有在訂戶和非訂戶表中都不存在該電子郵件才能打印。
我知道如何做到這一點與數組,但是我想要一個普通的mysql查詢。
mysql查詢會是什麼?
謝謝!
你可以做到這一點與子查詢(這是緩慢的,請閱讀下面的線!):
SELECT email
FROM subscribers
WHERE email NOT IN(SELECT email FROM unsubscribers)
然而,這對於性能非常糟糕。我建議你改變你的數據庫的方式,只有一個表subscribers
,並添加一列active
(tinyint)。當有人退訂,你從1該值設置爲0之後,你可以停留在1個表:
SELECT email FROM subscribers WHERE active=1
這是更快的,因爲一些原因:
除了速度更快之外,它對您的數據庫結構會更好。你不希望兩張桌子幾乎一樣,有電子郵件地址。這會產生重複的數據,並可能導致錯位
對於剛剛編輯我的人帖子:我正在研究一些更多的信息。已完成部分編輯並在我的實現中實現:) – Martijn
您聽起來像一個沒有太多SQL經驗的人。你的頭銜確實指向了正確的方向。這裏是你如何把組件連接在一起:
select m.*
from mass_subscribers m
where not exists (select 1 from subscribers s where s.email = m.email) and
not exists (select 1 from unsubscribers u where u.email = m.email);
NOT EXISTS
恰好是這種類型的查詢非常不錯的選擇;它在MySQL和其他數據庫中通常非常高效。
沒有子查詢,使用連接
SELECT mass_subscribers.*
FROM mass_subscribers ms
LEFT JOIN subscribers s ON ms.email=s.email
LEFT JOIN unsubscribers us ON us.email=s.email
WHERE
ms.email IS NULL
AND
us.email IS NULL
你認爲它應該是怎樣的?任何你已經嘗試過的? –
你不需要更多的信息......有兩個表,它們都包含一個名爲(類似於)'email'的列,你需要來自T1的電子郵件,它不存在於T2的電子郵件中 – Martijn