单表中的简单选择查询

时间:2018-10-25 15:41:11

标签: mysql sql

我有表订单,有很多列,但是我对它们感兴趣,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的那些用户...但是我被困住了。

2 个答案:

答案 0 :(得分:1)

使用group byhaving。假设您在表中没有重复项:

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);