0

我已经为此奋斗了几个小时,并且在使用正确的 MySQL 语法方面遇到了困难。任何关于我正在寻找的 SQL 类型的指针都将不胜感激。

请考虑这两个简单的表:

purchase:
id  email   product_id
1   andy@aaa.com    1
2   bob@bar.com     2
3   charly@code.com     1
4   charly@code.com     2

subscriber:
id  email   name
1   andy@aaa.com    Andy
2   bob@bar.com     Bob
3   charly@code.com     Charly

我想选择没有购买 product_id 1 的订阅者。即:在这种情况下,它应该只返回 Bob 的行。

但是,我目前正在使用这个...

SELECT DISTINCT subscriber.*
FROM subscriber
LEFT OUTER JOIN purchase
ON subscriber.email = purchase.email
WHERE ( purchase.product_id <> 1 )

...返回这个:

id  email   name
2   bob@bar.com     Bob
3   charly@code.com     Charly

我知道我需要处理有人在“购买”表中出现两次的情况。我怎样才能做到这一点?

谢谢指点!

法比安

4

2 回答 2

3

只需使用以下内容:

SELECT DISTINCT subscriber.*
FROM subscriber
LEFT OUTER JOIN purchase
ON (subscriber.email = purchase.email and purchase.product_id = 1)
WHERE purchase.product_id IS NULL
于 2013-02-19T22:16:51.393 回答
0

我认为最简单的方法是考虑购买产品的订阅者——然后将它们过滤掉。以下使用not exists子句执行此操作:

SELECT subscriber.*
FROM subscriber
where Not exists (select 1 from purchase where subscriber.email = purchase.email and purchase.product_id = 1)
于 2013-02-19T22:07:59.300 回答