1

この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)

私がやりたいのは、すべての一般的な ID とともに、campaign_id=3 を持つすべての要素の選択を解除することです。この場合、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)
4

3 に答える 3

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
)
于 2012-11-08T15:06:01.400 に答える
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
)
于 2012-11-08T15:07:26.437 に答える
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)

大規模なデータセットがある場合、「not in」は非効率になる可能性がありますが、機能するはずです

于 2012-11-08T15:07:07.423 に答える