我有这张表:
销售(产品代码,无客户,金额,ID销售)
客户(无客户,姓名,地址,电话,城镇)
产品(产品代码,说明,价格)
好吧,我的问题是,如何在MySQL中执行此查询? :
购买所有产品的客户的名称。
我只有这个查询将我必须使用的两个表连接起来:
使用(无客户)从客户加入销售中选择名称;
但我有一个问题,我该如何分离购买了所有产品的客户?
感谢您的帮助。
答案 0 :(得分:0)
这称为关系划分。它使用矛盾得到结果。这称为经典方法。
select c.name from customer c where not exists
(select * from products p where not exists
(select * from sales s where p.productcode=s.productcode and c.nocustomer=s.nocustomer))
还有一种方法可以做这些类型的查询。它是几年前发明的,发表在一篇研究论文中,声称新方法比传统方法快得多。我将尽快引用来源。新方法使用group by和count(*),如下所示:
select c.customername from customer c,sales s,product p
where p.productcode=s.productcode and c.nocustomer=s.nocustomer
group by s.nocustomer having count(*)=
(select count(distinct p1.productcode) from product p1)
上述查询只是将客户购买的产品数量与产品表中不同产品的总数进行比较,并返回符合条件的客户名称。在个人备注中,我更喜欢经典方法但是新方法的响应要比经典方法快得多,我自己也检查了一下。希望它有所帮助。