所以我的两张桌子的粗略结构如下:
Table one: Services
services.id
services.name
Table two: Orders
orders.id
orders.item
orders.service
表一包含服务列表。表二是订单清单。我正在尝试从表2(订单)生成所有服务订单的列表,但也包括(零)未订购的服务。我知道那是LEFT JOIN的来源,但它似乎根本不起作用。它显示大多数服务,但是没有显示一个或两个记录(来自服务)。这是我到目前为止使用的查询..
非常感谢任何指导,谢谢!
select services.name,count(orders.service)
from services
LEFT JOIN orders ON services.id=orders.service
WHERE item IN (1,2,3,4)
group by statuses.service;
答案 0 :(得分:5)
您的原始选择很好,应该允许来自服务表的所有记录。但是,您可以通过where
子句对此进行限制。如果特定行没有联接,则item
中会有一个NULL
WHERE
子句正在过滤掉。
SELECT services.name
,COUNT(orders.service)
FROM services
LEFT JOIN orders ON services.id = orders.service
WHERE item IS NULL
OR item IN ( 1, 2, 3, 4 )
GROUP BY statuses.service;
请原谅我,如果有点错误,我来自SQL Server背景。
答案 1 :(得分:4)
首先,我相信你有一个错字 - statuses.service应该是services.name,对吗?
由于item是orders表中的一列,您应该将它放在连接条件中:
select services.name,count(orders.service)
from services
LEFT JOIN orders ON services.id=orders.service and services.item IN (1,2,3,4)
group by statuses.service;
否则,您过滤掉没有订单的服务或其订单只有(1,2,3,4)中没有的项目。
亲切的问候,弗兰克