SQL Server离开加入

时间:2013-07-17 08:48:32

标签: sql-server join count group-by subquery

我正试图在一个查询中进行左连接,但似乎我在某处错了。

table machines
-------------- 
machineID
FaNo
Barcode
RoutingCode
Name


table log
-------------
logID
lineBarcode
machineBarcode

在日志表中,机器和线路上有记录。在一条线上可以有许多不同的机器和机器来自同一类型 机器类型为routingCode,因此我有兴趣选择生产线中的所有机器并对它们进行分组。只有具有不同routingCode的机器才能单独显示,我想得到各种类型机器的数量 这是这样做的。

SELECT routingcode, name, count(1)
FROM machines 
JOIN log ON log.machinebarcode = machines.barcode
WHERE log.linebarcode = 100000000001
GROUP BY routingcode, name

好的一切运行顺利,但这样我只得到log表中相关的机器,并根据linebarcode进行记录。
我认为如果我LEFT JOIN日志表,我将从machines表中获取所有机器并显示它们,当然只有log表中找到的机器才能正确count 1}},但没有。
我在哪里误以及如何找到合适的解决方法?

2 个答案:

答案 0 :(得分:4)

您需要将条件log放入on条款而不是where。对于log中的所有列,左外连接保留的非匹配行将为空扩展。

如果条件位于NULL,则log.linebarcode的{​​{1}}行将再次被删除。

而不是where,您需要计算COUNT(1)中不属于log的列

NULL

答案 1 :(得分:-1)

它为你提供差异机器名称viz routingcode和count

SELECT distinct name, routingcode, count(1)
FROM machines 
JOIN log ON log.machinebarcode = machines.barcode
WHERE log.linebarcode = 100000000001
GROUP BY routingcode, name