【发布时间】:2013-03-16 09:02:32
【问题描述】:
我需要一个查询来选择一堆条目,然后使用这些条目将一堆行选择成一行。下面显示了一个典型条目,以及典型结果的外观。
table1
id
-------
3
table2
id value table1
--------------------------
5 value1 3
6 value2 3
table3
id value table1
-------------------------
9 value3 3
10 value4 3
table4
id table1
---------------
14 3
15 3
table5
id value table4
-------------------------------
19 value5 14
20 value6 14
21 value7 15
result
result1 result2 result3 result4
------------------------------------------------------
3 value1 value3 value5, value6; value7
只需要表1和表2的第一个结果。表 2 通常可以为 null,value3 需要进入 result2。 目前,我使用如下语句选择每个条目,该语句仅返回 result1,然后对于每个条目,我对每个结果进行单独查询
SELECT DISTINCT id FROM (
-complicated select in here
) AS temp;
然后对每个id分别执行:
SELECT value FROM table2 WHERE table1 = id LIMIT 1;
SELECT value FROM table3 WHERE table1 = id LIMIT 1;
SELECT value, table4.id FROM table4, table5 WHERE table4.id = table5.table4 AND table1 = id;
并使用代码将其格式化为结果表之类的内容。
问题是只有第一个查询是在后台线程上完成的,而其余的都是在 UI 线程上完成的。我想在一个查询中完成所有操作,但是在将 table4 放入单行时遇到问题,并且只选择 table2 和 table3 的第一个结果。
【问题讨论】:
-
应该如何计算结果?为什么
value2和value4没有出现? -
Table 2 can often be null, value3 would need to go into result2。在这一点上,您应该问自己您的数据库设计是否是好的。这里缺乏简单性会引发危险信号。 -
但是看看这个:IFNULL sqlite.org/lang_corefunc.html#ifnull
-
蒂姆,我知道数据库设计问题,我可以简单地解决这样的问题的唯一方法是复制数据,所以这可能是一个解决方案。