获取 table A 中引用 table B 的行数

Get count of rows in table A that have a reference to table B

我将加入两个 table,'device' 和 'unit'。设备定义了设备的类型,一个单元是一个唯一的设备,它指向设备中的一行table,定义了它的类型。

我现在正在为 'device' 中的每种设备类型搜索 select 的解决方案,并计算有多少单元指向该设备。我目前的解决方案遇到的问题,

SQL:

SELECT device.*, COUNT(unit.id) 
FROM device LEFT JOIN unit ON device.id = unit.device_id GROUPBY device.id

Scala Slick:

def devicesWithUnitCount = for {
    (device, unit) <- TableQuery[TDDevice] joinLeft TableQuery[TDUnit] 
                                           on (_.id === _.deviceID) 
                                           groupBy (_._1)
} yield (device, unit.size)

是我得到的计数结果至少为1,即使没有单元指向设备类型。

如何在 SQL 或更好的 Slick 中实现这种计数?

你的 SQL 对你想做的事情是正确的。 Slick 可能会产生这样的查询:

SELECT device.*, COUNT(device.id) 
-----------------------^
FROM device LEFT JOIN
     unit
     ON device.id = unit.device_id
GROUP BY device.id;

也许有一种方法可以让它计数 device_id,这显然来自 unit