2

Product テーブルがあり、

id product
1  Apple
2  Bag
3  Cat
4  Ducati

とカートテーブル

 id  user_id   product_id
 1     1          2
 2     1          3
 3     2          1
 4     3          1

そのため、特定のユーザーを見て、そのユーザーがカートに何を持っていないかを確認したいと考えています。

つまり、上の例では

SELECT ...... WHERE user_id=1 .....  

ユーザー 1 は既に Bag と Cat を持っているため、Apple と Ducati が返されます。

(これは別の質問と重複する可能性がありますが、非常に多くのバリエーションがあり、正確な一致を見つけることができず、これらの簡単な用語を入れると役立つ場合があります)

4

4 に答える 4

2

product から user1 が購入したすべての製品への左結合を実行します。これは、結合のサブセレクトで取得できます。これにより、user1 の管理下にないすべての製品 ID の製品 ID が null になります。where句は、ユーザーのカートに入っていないことを意味するnullの製品IDをすべて選択し、基本的に購入したアイテムをフィルタリングします。

select p.name
from product p
left join (select product_id, user_id
           from cart where user_id = 1)
c
on p.id = c.product_id
where c.product_id is null;

SQL フィドル: http://sqlfiddle.com/#!2/5318eb/17

于 2013-10-03T09:07:10.173 に答える
0
Select
  * 
From Product p
Where p.id Not In
    (
        Select c.product_id
        From Cart c
        Where User ID = ____
    )
于 2013-10-03T09:10:50.347 に答える
0
SELECT product FROM product_table 
WHERE product NOT IN
(SELECT product_id FROM cart_table WHERE user_id = 1);  
于 2013-10-03T09:11:01.907 に答える
0

これにより、カートにないすべてのユーザーのすべての製品が提供されます。

select  c.user_id,a.Product
from cart c Cross Join product a 
left Join 
cart b on b.product_id=a.id and c.user_id=b.user_Id
where b.product_id is null
group by  c.user_id,a.Product

SQL フィドルのデモ

于 2013-10-03T09:21:50.000 に答える