发出这个sql请求后:
SELECT user.id, campaign_id, user_id
FROM `user`
LEFT OUTER JOIN `email_solus`
ON email_solus.user_id=user.id
我有这张桌子。
id campaign_id user_id
------ ----------- ---------
1 3 1
1 5 1
1 6 1
2 (NULL) (NULL)
3 (NULL) (NULL)
4 (NULL) (NULL)
5 (NULL) (NULL)
7 (NULL) (NULL)
8 (NULL) (NULL)
9 (NULL) (NULL)
10 (NULL) (NULL)
12 (NULL) (NULL)
13 (NULL) (NULL)
14 (NULL) (NULL)
15 (NULL) (NULL)
16 (NULL) (NULL)
17 (NULL) (NULL)
我想要做的是取消选择campaign_id = 3的所有元素,以及所有常见ID。在这种情况下,我需要删除id = 1的所有元素,并使用如下表格:
id campaign_id user_id
------ ----------- ---------
2 (NULL) (NULL)
3 (NULL) (NULL)
4 (NULL) (NULL)
5 (NULL) (NULL)
7 (NULL) (NULL)
8 (NULL) (NULL)
9 (NULL) (NULL)
10 (NULL) (NULL)
12 (NULL) (NULL)
13 (NULL) (NULL)
14 (NULL) (NULL)
15 (NULL) (NULL)
16 (NULL) (NULL)
17 (NULL) (NULL)
答案 0 :(得分:3)
SELECT user.id, campaign_id, user_id
FROM user
LEFT JOIN email_solus
ON email_solus.user_id=user.id
WHERE user.id NOT IN
(
SELECT user_id
FROM email_solus
WHERE campaign_id = 3
)
答案 1 :(得分:2)
您可以使用NOT EXISTS
进行过滤,如下所示:
SELECT user.id, campaign_id, user_id
FROM `user`
LEFT OUTER JOIN `email_solus` ON email_solus.user_id=user.id
WHERE NOT EXISTS (
SELECT * FROM `email_solus` es WHERE es.user_id=user_id AND es.campaign_id=3
)
答案 2 :(得分:0)
SELECT user.id, campaign_id, user_id
FROM `user`
LEFT OUTER JOIN `email_solus`
ON email_solus.user_id=user.id
where user.id not in
(select user.id from 'user'
where campaign_id = 3)
应该有效,但如果你有一个大型数据集,那么'不在'可能效率低下