如何包含两个表中的所有值? group_concat 和其他值

Posted

技术标签:

【中文标题】如何包含两个表中的所有值? group_concat 和其他值【英文标题】:How to includ all values from both tables? Group-Concat and other values 【发布时间】:2013-06-29 22:03:33 【问题描述】:

简而言之,我已经提供了数据,以及目前的结果,请告诉我如何进行最后一步。请使用 SQLite。

==书面解释==

想使用表 B 连接表 A 中的值,然后显示表 A 中的所有结果,即使是表 B 中没有值的结果。我尝试了一大堆变体,但我真的卡住了。

表格:

*user_tables*

_id         table_name  table_version  table_status
----------  ----------  -------------  ------------
1           addresses   1              1
2           jobs        1              1
3           people      1              1
4           phones      1              1

*user_tables_depends*

_id         user_table_id  user_table_depend_id
----------  -------------  --------------------
1           1              2
2           1              3
3           2              1
4           2              4
5           4              2

当前查询:

SELECT table_name, table_version, table_status, 
     GROUP_CONCAT(dependName, ', ') AS table_dependencies 
FROM user_tables JOIN 
    (SELECT user_table_id, table_name AS dependName 
     FROM user_tables_depends, user_tables 
     WHERE user_tables._id = user_table_depend_id) 
WHERE user_tables._id = user_table_id 
GROUP BY table_name

查询结果:

table_name  table_version  table_status  table_dependencies
----------  -------------  ------------  ------------------
addresses   1              1             jobs, people
jobs        1              1             addresses, phones
phones      1              1             jobs

想要的结果:

table_name  table_version  table_status  table_dependencies
----------  -------------  ------------  ------------------
addresses   1              1             jobs, people
jobs        1              1             addresses, phones
people      1              1             
phones      1              1             jobs

注意:请不要担心值是什么,它们是虚拟数据,我只需要查询在 SQLite 中按需要工作即可。提前致谢,干杯。

【问题讨论】:

【参考方案1】:

这就是outer joins 的用途。 你应该使用正确的连接语法(ON):

SELECT ...
FROM user_tables LEFT JOIN 
    (...)
    ON user_tables._id = user_table_id
GROUP BY ...

【讨论】:

aaaah 哇,我还以为我对 SQL 还是有一定的把握,这令人欣慰,真不敢相信我忘记了基础知识。无论如何,谢谢先生的帮助,它就像一个魅力! 应该使用运算符+。只是为了澄清。刚刚浏览了一本书 oracle sql,它说 + 运算符具有创建一个或多个空行的效果,可以将非缺陷表中的一个或多个行连接到该行。 @Raghunandan 使用 + 进行外部连接是过时的 Oracle 特定语法。从 9i 版开始,Oracle 支持 SQL 连接。

以上是关于如何包含两个表中的所有值? group_concat 和其他值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C# 程序中的新值快速更新表中的所有行

如何计算 Access 2010 表中所有列中的所有 NULL 值?

查找存在于两个不同表中的单个行

SQL 连接两个表并检查两个表中的每个值是不是存在

如何链接多个组合框表中的两个组合框?

查找数据库中所有表中的字段包含特定值,之后修改特定值