我有表订单,有很多列,但是我对它们感兴趣,user_id和article_id。
|--------------------|-----------------|------------|
| user_id | article_id | Name |
|--------------------|-----------------|------------|
| 1 | 115 | John |
| 1 | 55 | John |
| 2 | 115 | Mike |
| 2 | 49 | Mike |
| 3 | 115 | Dave |
| 3 | 55 | Dave |
|--------------------|-----------------|------------|
我需要进行查询,以选择具有article_id 115和55的用户。此示例中的预期结果是获取名为John和Dave的用户,因为他们两个均具有115和55。没有Name列,我只是为了更好地理解而添加了它。
我已经尝试过以下查询:
SELECT * FROM orders AS o
WHERE o.article_id IN (55, 115)
ORDER BY o.user_id
但是我得到了所有article_id和user_id。我知道我应该使用另一个选择来只选择55和115的那些用户...但是我被困住了。
答案 0 :(得分:1)
使用group by
和having
。假设您在表中没有重复项:
SELECT o.user_id, o.name
FROM orders o
WHERE o.article_id IN (55, 115)
GROUP BY o.user_id, o.name
HAVING COUNT(*) = 2; -- has both
答案 1 :(得分:1)
您可以使用GROUP BY
子句:
SELECT o.user_id, o.name
FROM orders o
WHERE o.article_id IN (55, 115)
GROUP BY o.user_id, o.name
HAVING MIN(o.article_id) <> MAX(o.article_id);