-1

我发现很难理解下面的代码。你能给我一个代码如何工作的逻辑流程吗?

问题 - 假设您想在“客户”表中显示每个客户下达的订单总数。订单与相应的客户 ID 一起存储在 Orders 表中。

步骤 -

  1. 从客户表中检索客户列表。
  2. 对于检索到的每个客户,计算 Orders 表中关联订单的数量。

解决方案 -

SELECT cust_name, cust_state, 
    (SELECT COUNT(*)
        FROM Orders
        WHERE Orders.cust_id = Customers.cust_id
    )
AS order_nos
FROM Customers
ORDER BY cust_name

我无法理解括号内的 count(*) 部分。请帮我弄清楚。

谢谢。

4

2 回答 2

0

它被称为相关子查询。从本质上讲,对于每个客户,您将获得该客户拥有多少订单的计数。“魔法”在WHERE Orders.cust_id = Customers.cust_id子查询的子句中。这是将此结果与您的主要查询相关联的部分。它的意思是“从主查询中获取 cust_id,现在找到 cust_id 是那个 cust_id 的订单数”。

于 2012-06-10T18:14:53.010 回答
0

它只是计算行数。在这种情况下,这是每个客户的订单数量。替代COUNT(column_name)为您提供column_name不为空的行数。

没有子查询的等价物(使用组代替):

SELECT cust_name, cust_state, COUNT(orders.cust_id) order_nos
FROM Customers
    LEFT OUTER JOIN Orders on Customers.cust_id = Orders.cust_id
GROUP BY cust_name, cust_state
ORDER BY cust_name
于 2012-06-10T08:24:12.950 回答