mysql - 获取表 A 中引用表 B 的行数

标签 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 中实现此计数?

最佳答案

您的 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

关于mysql - 获取表 A 中引用表 B 的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32813118/

相关文章:

arrays - 二维scala数组迭代

php - 通过php检查mysql_query的结果中是否有条目

php - MySQL - 如何使用文件名作为查询的一部分?

mysql每天都显示即使没有结果

MYSQL 创建事件

mysql - 错误号 : 150 Cant create table in database

mysql - 从 SQL 数据库中选择特定的行和列

sql - 有没有办法重写这个语句而不需要子查询?

scala - 为什么在 spark-3 上写入 1900 年之前的时间戳不会抛出 SparkUpgradeException?

android - 如何使用 Android 模块创建 sbt 项目并使用 Intellij Ultimate 运行?