SQL:如何选择已订购多个商品的客户

时间:2017-09-16 07:22:21

标签: mysql

这是一些示例数据:

ID Item 

1 A    
1 A 
1 B 
2 A 
2 A    
3 A 
3 A 
3 A

问题:我试图编写代码,以便选择的唯一记录是ID为1的客户(即同时具有产品A和B的客户)。所以结果应该是这样的:

1 A    
1 A    
1 B

我尝试了很多不同的东西,但我被困住了。我尝试过自我加入,但它并没有产生我想要的东西:

SELECT a.id, a.item
FROM table1 a Join table1 b on a.id=b.id
WHERE upper(a.item) = 'A'
AND upper(b.item) = 'B';

这将为我提供合适的客户(即客户1),但它不会提取所有3条记录。它只给出了一行。

最接近的类似问题是 enter link description here

3 个答案:

答案 0 :(得分:1)

因为您想要查看哪些用户符合某个条件并获取有关这些用户的所有信息 - 您需要一个嵌套查询:

SELECT id,item FROM table1 WHERE id IN(
    SELECT a.id
    FROM table1 a Join table1 b on a.id=b.id
    WHERE upper(a.item) = 'A'
    AND upper(b.item) = 'B'
)

我接受了你的工作查询,并在WHERE子句中使用它来获得更通用的查询 - 应该为你做的伎俩

答案 1 :(得分:0)

您可以将查询用作subselect以获取pid,然后输出所有pids行。像这样:

SELECT id, item 
  FROM table1 
 WHERE id IN (SELECT a.id
                FROM table1 a 
                JOIN table1 b 
                  ON a.id=b.id
               WHERE UPPER(a.item) = 'A'
                 AND UPPER(b.item) = 'B')

答案 2 :(得分:-2)

这是你要找的吗?或者可能是我不明白你的问题。

SELECT a.pid, a.mname
FROM meds a 
WHERE a.pid = 1