【问题标题】:SQLite Join Table from Subquery来自子查询的 SQLite 连接表
【发布时间】:2017-03-28 13:27:14
【问题描述】:

我在 SQLite 表(表 1)中有以下方案:

ID          NAME
---------------------------------
1           "NAME 1"
2           "NAME 2"
...         ...

表中的 Id 是另一个表(如表 2)中的外键:

ID           NAME            DEPARTMENT (FROM TABLE 1)
------------------------------------------------------------
1            "PRODUCT 1"     2
2            "PRODUCT 2"     2
3            "PRODUCT 3"     1

我需要返回一个查询,其中包含表 1 中的所有元素以及一个名为“PRODUCTS”的新列,该列是表 2 中 Department = Table1.ID 的所有条目的计数。

结果应该是这样的

ID         NAME          ENTRIES
---------------------------------------------
1          "NAME 1"      1 (SELECT COUNT FROM TABLE 2 WHERE DEPARTMENT = 1)
2          "NAME 2"      2 (SELECT COUNT FROM TABLE 2 WHERE DEPARTMENT = 2)

我不知道如何在 SQLite 中执行此操作。可能吗?如何编写查询?

【问题讨论】:

    标签: android database sqlite join subquery


    【解决方案1】:

    加入第二个表并按第一个表列分组。 当您对结果进行分组时,count() 之类的聚合函数适用于每个组,而不是完整的结果集。

    select t1.id, t1.name, count(t2.id) as entries
    from table_1 t1
    left join table_2 t2 on t1.id = t2.department
    group by t1.id, t1.name
    

    【讨论】:

    • 我是否需要覆盖表名,或者您只是这样做,因为这样更容易编写?
    • 我只是为了让它更短
    【解决方案2】:

    correlated subquery 可以做到这一点:

    SELECT ID,
           Name,
           (SELECT COUNT(*)
            FROM Table2
            WHERE Department = Table1.ID
           ) AS Entries
    FROM Table1;
    

    【讨论】:

    • 这是一种更简单的方法。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多