如何包含两个表中的所有值? 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 和其他值的主要内容,如果未能解决你的问题,请参考以下文章