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
和列重新排列之外,这与原始问题中的内容相同。