联接表-包括结果行中其他表中没有数据

问题描述 投票:0回答:1

我有这个SQL:

SELECT 
    c.id, 
    c.name, 
    SUM(CASE WHEN o.status = 1 THEN 1 ELSE 0 END)
FROM orders o, customers c
WHERE o.customer_id = c.id
GROUP BY c.id;

从表customer中获取所有客户。

计算表status=1orders分组的列customer_id中有多少行。

如果客户在表sql中至少有一个订单(任何状态,即使所有状态都与orders相异,则我的1都可以正常工作。

但是,如果表order中有一个没有订单(不依赖状态)的客户,它将不会出现在结果中。

假设我们有这两个客户:

100 - C1 - 15 orders(7 have status 1)
101 - C2 - No orders

结果将是:

100 | C1 | 7

如何包含C2

100 | C1 | 7
101 | C2 | 0
mysql sql
1个回答
0
投票

NeverFROM子句中使用逗号。 总是使用正确的,显式的标准 JOIN语法。

而且,您想要LEFT JOIN

SELECT c.id,  c.name, 
       COUNT(o.customer_id)
FROM customers c LEFT JOIN
     orders o
     ON o.customer_id = c.id AND o.status = 1
GROUP BY c.id;
© www.soinside.com 2019 - 2024. All rights reserved.