1

次のクエリを実行するためのより良い方法はありますか?ユーザーが特定のカテゴリのすべての製品を持っているかどうかを確認しようとしています

SELECT t1.id 
  FROM 
    (SELECT count(product_id) as count, product_id FROM categories group by product_id) t1 
  INNER JOIN 
    (SELECT count(product_id) as count, product_id FROM categories INNER JOIN user_products on user_products.product_id = categories.product_id where user_id=116 group by product_id) t2 
  ON t1.id=t2.id 
  WHERE t1.count = t2.count
4

2 に答える 2

1

まあ、これはうまくいくはずですが、これはより良いですか?わからない...

select 
c.product_id
from categories c
left join user_products up on up.product_id = c.product_id and up.user_id = 116
group by c.product_id
having  sum (case when up.product_id is null then 0 else 1 end) = 0
于 2012-09-19T15:21:00.120 に答える
1

TRUEこれは、ユーザーが「カテゴリ」にすべての製品を持っている場合(または最初から存在しない場合)に返されます。

SELECT count(*) = 0
FROM   categories c
WHERE  NOT EXISTS (
   SELECT 1
   FROM   user_products u
   WHERE  u.product_id = c.product_id
   AND    u.user_id = 116
   )

これまでに提示されたソリューションのいずれよりも高速である必要があります。(矛盾する質問が当てはまるという私の解釈を提供しました。)

于 2012-09-19T19:12:06.283 に答える