gpt4 book ai didi

sql-server - SQL Server 左连接

转载 作者:行者123 更新时间:2023-12-03 00:23:33 26 4
gpt4 key购买 nike

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

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中找到的机器 表将有正确的计数,但没有。
我在哪里出错了以及如何找到合适的解决方法?

最佳答案

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

如果条件位于 where 中,log.linebarcodeNULL 行将再次被删除。

此外,您还需要计算 log 中不为 NULL 的列,而不是 COUNT(1)

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

关于sql-server - SQL Server 左连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17695216/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com