5

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

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,但没有。
我在哪里弄错了,如何找到合适的解决方法?

4

2 回答 2

4

您需要将条件放在log子句on中而不是where. 由左外连接保留的不匹配行将对 中的所有列进行空扩展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 
于 2013-07-17T09:00:31.833 回答
-1

它为您提供不同的机器名称,即路由代码和计数

SELECT distinct name, routingcode, count(1)
FROM machines 
JOIN log ON log.machinebarcode = machines.barcode
WHERE log.linebarcode = 100000000001
GROUP BY routingcode, name
于 2013-07-17T09:11:07.683 回答