我正在使用以下Slick代码来实现SQL语句。
SQL :
SELECT device.*, COUNT(unit.id) AS cnt
FROM device LEFT JOIN unit ON device.id = unit.device_id GROUP BY device.id;
Scala Slick :
def devicesWithUnitCount = for {
(device, unit) <- TableQuery[TDDevice] joinLeft TableQuery[TDUnit]
on (_.id === _.deviceID)
groupBy (_._1)
} yield (device, unit.size)
示例模式,我无法让查询在那里工作,但它在我的服务器上运行。 http://sqlfiddle.com/#!9/0f335
但是,与正确返回0的SQL语句不同,即使单元中没有关联的行,光滑的实现也会产生1的计数。
我已经认为这是我要求帮助的SQL语句(Get count of rows in table A that have a reference to table B)并且被告知SQL语句应该正常工作(双重检查,并确认它有效)。现在在这个答案的帮助下,我现在知道我的Slick实现是错误的,我的问题是如何修复光滑的查询。
提前致谢。
答案 0 :(得分:2)
请参阅groupBy的Slick文档,其中包含:
groupBy调用必须后跟地图调用
所以我想这会为你做到这一点:
def devicesWithUnitCount = (
TableQuery[TDDevice] joinLeft TableQuery[TDUnit]
on (_.id === _.deviceID) )
.groupBy (_._1)
.map{ case (grouped, all) => (grouped, all.map(_._2).size) }