Sql server SQL Server左连接

Sql server SQL Server左连接,sql-server,join,count,group-by,subquery,Sql Server,Join,Count,Group By,Subquery,我试图在一个查询中使用左连接,但似乎我在某个地方错了 table machines -------------- machineID FaNo Barcode RoutingCode Name table log ------------- logID lineBarcode machineBarcode 日志表中有机器和线路上的记录。一条生产线上可以有许多不同的机器和同一类型的机器。 机器类型为routingCode,因此我有兴趣选择生产线中的所有机器并对它们进行分组。只有具有不同ro

我试图在一个查询中使用左连接,但似乎我在某个地方错了

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
上的条件放在
on
子句中,而不是
Where
中。对于
log
中的所有列,由左外部联接保留的不匹配行将进行空扩展

如果条件在
where
中,则
log.linebarcode
NULL
行将再次被删除

另外,您需要从
log
中计算一列,而不是
COUNT(1)
,该列不会为
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 

它给你不同的机器名称,即路由代码和计数

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

非常感谢。我不知道我可以对连接设置许多条件。:)除了添加了一个无意义的
distinct
和列重新排列之外,这与原始问题中的内容相同。