我剩下两个表,“设备”和“单元”。设备定义设备的类型,单元是唯一的设备,它指向设备表中的一行,并定义其类型。
我现在正在寻找一种解决方案,以从“设备”中选择每种设备类型,并计算指向该设备的设备数量。我目前的解决方案面临的问题是
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。
device_id
unit