【发布时间】:2012-04-18 22:03:09
【问题描述】:
我已经简化了这个问题,所以更容易发布。我坚持添加与其他表没有任何关系的配置表。如果您宁愿跳过查看我真正的问题是什么,请查看当前的最终输出和所需的最终输出。为方便起见,最后我有一个不起作用的 SQL 解决方案。
请提前帮助和感谢!
背景:
基本上我有一个语句,它有 8 个内部连接来连接各种表数据。我最初有 8 个不同的查询,但在我的嵌入式机器上,每个查询运行大约 2-3 秒,总时间约为 20-30 秒。这太长了。大部分时间是交易建立和拆除;查询非常快。由于我希望在 1-2 秒的时间范围内获得数据,因此我决定将所有查询合并到一个查询中。不幸的是,这些表本身是无法从嵌入式设备查询的外部数据库的副本。我不愿意将此时的数据合并到一个表中。该设备只有 python2.5 和 sqlite3,虽然我已经安装了 sqlalchemy 并且我通常在我的代码中使用 ORM。不幸的是,我无法在机器上生成更多的二进制文件,但我可以编写尽可能多的 Python。
数据
表 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
【问题讨论】:
标签: sqlite union group-concat coalesce