SQL Server离开加入

Dav*_*ite 5 sql-server join group-by count subquery

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

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


table log
-------------
logID
lineBarcode
machineBarcode
Run Code Online (Sandbox Code Playgroud)

在日志表中有机器和线路上的记录.在一条线上可以有许多不同的机器和机器来自同一类型.
机器类型是routingCode,所以我有兴趣选择生产线中的所有机器并对它们进行分组.只有不同的机器routingCode应该单独显示,我想得到各种机器的数量.
这是通过这种方式完成的.

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

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

Mar*_*ith 4

您需要将条件 onlog放入on子句而不是where. 左外连接保留的非匹配行将为 中的所有列进行 null 扩展log

如果条件在 中,带有NULLfor的行将再次被删除。log.linebarcodewhere

另外,COUNT(1)您不需要计算一列,而log不会是NULL

SELECT routingcode,
       name,
       count(log.linebarcode)
FROM   machines
       LEFT JOIN log
         ON log.machinebarcode = machines.barcode
            AND log.linebarcode = 100000000001
GROUP  BY routingcode,
          name 
Run Code Online (Sandbox Code Playgroud)