简体   繁体   中英

MySQL: Match all records of another table

I want to know all of the users that have bought all the specified products

Table items_list (which can evolve, so the number of entries can not be used to query)

+---------+
| item_id |
+---------+
|     101 |
|     200 |
|     512 |
+---------+

Table orders

+---------+---------+
| item_id | user_id |
+---------+---------+
|     101 |       1 |
|     200 |       1 |
|     512 |       1 |
|     200 |       2 |
|     512 |       2 |
|     101 |       3 |
|     200 |       3 |
+---------+---------+

When I do

SELECT * FROM orders o WHERE o.item_id IN (SELECT i.item_id FROM items_list i) GROUP BY user_id

I got all the users

I want only user_id 1, who has bought everything from items_list

Well one of the methods can be grouping my user_id and then checking DISTINCT item_id :

SELECT 
  * 
FROM
  orders o 
GROUP BY o.`user_id` 
HAVING COUNT(DISTINCT(o.item_id)) = (SELECT  COUNT(*) FROM items_list)

COUNT(DISTINCT(o.item_id)) will give you All distinct items for the user and then (SELECT COUNT(*) FROM items_list) will give you the count of items in your table. Checking if the count matches should give you the result you are expecting

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM