【问题标题】:Get count of rows in table A that have a reference to table B获取表 A 中引用表 B 的行数
【发布时间】:2015-09-27 21:38:11
【问题描述】:

我要加入两个表,“设备”和“单元”。 Device 定义了设备的类型,一个单元是一个唯一的设备,它指向设备表中的一行,定义了它的类型。

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

SQL

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

Scala 光滑

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

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

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

【问题讨论】:

  • 使用 deviceid 而不是 device.*?
  • 如何解决计数问题?
  • 想象一下你会得到一个值为 1,2,someval1,someval2,null.. 的行,其中 1 是设备 ID。这仍然会导致计数为 1
  • 但是我需要 device.*提供的信息,我只想另外获取指向device.id的单元数
  • 看看答案是否能满足您的需求

标签: mysql sql scala slick


【解决方案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

【讨论】:

  • 我什至没有注意到我正在使用的 SQL 语句已经完成了它应该做的事情,因为我认为我的 Slick 实现是正确的。感谢您的提示。
猜你喜欢
  • 2023-04-09
  • 1970-01-01
  • 2011-09-18
  • 2020-02-23
  • 2013-05-26
  • 1970-01-01
  • 2020-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多