获取表A中具有对表B

时间:2015-09-27 21:38:11

标签: mysql sql scala slick

我要加入两张桌子,'设备'和'单位'。设备定义设备的类型,单元是一个唯一的设备,指向设备表中的一行,定义其类型。

我正在寻找一种解决方案,从“设备”中选择每种设备类型。并计算有多少单位指向此设备。我目前的解决方案中遇到的问题,

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?

1 个答案:

答案 0 :(得分:1)

您的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无法明确的。