我正试图在一个查询中进行左连接,但似乎我在某处错了。
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}},但没有。
我在哪里误以及如何找到合适的解决方法?
答案 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