Mysql SQL查询以选择在同一列中具有不同值的子记录的父记录

Mysql SQL查询以选择在同一列中具有不同值的子记录的父记录,mysql,sql,select,inner-join,parent-child,Mysql,Sql,Select,Inner Join,Parent Child,该数据库具有一对多关系,其中父表Customers是客户列表,子表Orders是他们购买的物品列表。我正在尝试开发一个查询,以选择既买了电视又买了沙发的客户。以下查询返回0个结果 SELECT Customer.* FROM Customer JOIN Orders ON Customer.ID = Orders.customerID WHERE Orders.item = 'television' AND Orders.item = 'couch'; 将AND替换为OR不起作用,因为它会返回

该数据库具有一对多关系,其中父表Customers是客户列表,子表Orders是他们购买的物品列表。我正在尝试开发一个查询,以选择既买了电视又买了沙发的客户。以下查询返回0个结果

SELECT Customer.*
FROM Customer
JOIN Orders
ON Customer.ID = Orders.customerID
WHERE Orders.item = 'television'
AND Orders.item = 'couch';

将AND替换为OR不起作用,因为它会返回同时购买了两个或一个项目的客户。我的目标结果就是那些同时购买了这两种语言的客户。

您需要利用子查询或联合,您使用的是哪种风格的sql

SELECT *
FROM CUSTOMER c
WHERE EXISTS (SELECT 1 FROM ORDERS o WHERE c.id = o.id and type = 'couch')
  and EXISTS (SELECT 1 FROM ORDERS o WHERE c.id = o.id and type = 'tv')

我不是一个MySQL用户,但我从中学习了很多东西,所以很多查询都很慢。以下是只需要一个子查询的选项

SELECT *
FROM CUSTOMER c
WHERE (
    SELECT COUNT(DISTINCT o.type) FROM ORDERS o
    WHERE o.id = c.id AND o.type IN ('couch', 'tv')
) = 2


谢谢这起作用了。我甚至不知道“存在”的说法。我还是MySQL的新手。
SELECT *
FROM CUSTOMER c
WHERE c.id IN (
    SELECT o.id FROM ORDERS o
    WHERE o.type IN ('couch', 'tv')
    GROUP BY o.id
    HAVING MIN(o.type) <> MAX(o.type) -- or COUNT(DISTINCT o.type) = 2
)