我已经简化了这个问题,所以更容易发布。我坚持添加与其他表没有任何关系的配置表。如果您宁愿跳过查看我真正的问题是什么,请查看当前的最终输出和所需的最终输出。为方便起见,最后我有一个不工作的 SQL 解决方案。
请提前帮助和感谢!
背景:
基本上我有一个语句,它有 8 个内部连接来连接各种表数据。我最初有 8 个不同的查询,但在我的嵌入式机器上,每个查询运行大约 2-3 秒,总时间约为 20-30 秒。这太长了。大部分时间是交易的建立和拆除;查询非常快。由于我希望在 1-2 秒的时间范围内获得数据,因此我决定将所有查询合并到一个查询中。不幸的是,这些表本身是无法从嵌入式设备查询的外部数据库的副本。我不愿意将此时的数据合并到一个表中。该设备只有 python2.5 和 sqlite3,虽然我已经安装了 sqlalchemy 并且我通常在我的代码中使用 ORM。很遗憾,
数据
表 1:用户
name | number | data
--------------------------------
alpha | 12345 | special
beta | 54321 | special-er
表2(与表1无关):配置
name | data
--------------------------------
lang | eng
big | 24
medium | 20
small | 13
决赛桌输出我目前得到的:
name | number | data | config
-----------------------------------------------
alpha | 12345 | special | {null}
beta | 54321 | special-er | {null}
{null} | {null} | {null} | lang:eng
{null} | {null} | {null} | big:24
{null} | {null} | {null} | medium:20
{null} | {null} | {null} | small:13
决赛桌输出我想要的:
name | number | data | config
-----------------------------------------------
alpha | 12345 | special | lang:eng, big:24, medium:20, small:13
beta | 54321 | special-er | lang:eng, big:24, medium:20, small:13
当前(非工作)解决方案
这是我到目前为止所拥有的:
<!-- language: sql -->
SELECT *
FROM (
SELECT u.name as name
,u.number as number
,u.data as data
,NULL as config
FROM users u
UNION
SELECT NULL as name
,NULL as number
,NULL as data
,c.name||":"||c.data as config
FROM configurations c
) t