0

私はこれと数時間戦っていますが、適切な MySQL 構文を使用するのに苦労しています。私が探している種類の SQL に関するポインタは、非常に高く評価されます。

これらの 2 つの単純なテーブルを検討してください。

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 を購入しなかったサブスクライバーを選択したいと思います。つまり、この場合、ボブの行のみを返す必要があります。

しかし、私は現在これを使用しています...

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

「購入」テーブルに 2 回表示されるユーザーのケースを処理する必要があることは理解しています。どうやってやるの?

ポインタをありがとう!

ファビアン

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 に答える