用于确定客户记录的不相关子查询



我有两个表,customer和customer_order

客户

cust_id, cust_name
121 Acme Wholesalers
234 Griffen Electric
336 East Coast Marine Supplies
544 Sanford Automotive

客户订单

order_num,cust_id,order_date
1 121 2019-01-15
2 234 2019-07-24
3 336 2020-05-02
4 121 2019-01-15
5 336 2020-03-19
6 234 2019-07-24
7 121 2019-01-15
8 336 2020-06-12

我需要找出每个客户的名字,他们已经下了3个订单,但使用了一个不相关的子查询,并且没有JOINS

我使用关联查询得到了相同的查询结果


SELECT c.cust_name FROM customer c WHERE cust_id 
IN (SELECT GROUP_CONCAT(cust_id) FROM customer_order )

但这一次我需要相同的结果使用非相关和无连接也

看起来大石头正在寻找在customer_order中正好出现三次的cust_id值,我们可以做这样的

SELECT o.cust_id 
FROM customer_orders o
GROUP
BY o.cust_id
HAVING COUNT(*) = 3

返回引用HAVING子句中的聚合以限制行。

我们可以将该查询用作内联视图(或者,用mysql的说法是派生表(,然后使用

SELECT n.cust_id
FROM ( 
-- cust_id that have exactly three rows
SELECT o.cust_id 
FROM customer_orders o
GROUP
BY o.cust_id
HAVING COUNT(*) = 3
) n

并且通常对customers表执行JOIN以检索名称。

给定一个奇怪的限制";无联接";,我们可以(不太理想(使用WHERE foo IN (subquery)形式的

相关内容

  • 没有找到相关文章

最新更新