【发布时间】:2011-02-10 19:54:55
【问题描述】:
我在尝试执行查询时遇到了一些问题。我有两个表,一个包含元素信息,另一个包含与第一个表的元素相关的记录。这个想法是在同一行中获取元素信息和几条记录信息。
结构可以这样解释:
table [ id, name ]
[1, '1'], [2, '2']
table2 [ id, type, value ]
[1, 1, '2009-12-02']
[1, 2, '2010-01-03']
[1, 4, '2010-01-03']
[2, 1, '2010-01-02']
[2, 2, '2010-01-02']
[2, 2, '2010-01-03']
[2, 3, '2010-01-07']
[2, 4, '2010-01-07']
这是我想要实现的目标:
result [id, name, Column1, Column2, Column3, Column4]
[1, '1', '2009-12-02', '2010-01-03', , '2010-01-03']
[2, '2', '2010-01-02', '2010-01-02', '2010-01-07', '2010-01-07']
以下查询得到了正确的结果,但在我看来效率极低,必须为每一列迭代 table2。无论如何都可以进行子查询并重用它吗?
SELECT
a.id,
a.name,
(select min(value) from table2 t where t.id = subquery.id and t.type = 1 group by t.type) as Column1,
(select min(value) from table2 t where t.id = subquery.id and t.type = 2 group by t.type) as Column2,
(select min(value) from table2 t where t.id = subquery.id and t.type = 3 group by t.type) as Column3,
(select min(value) from table2 t where t.id = subquery.id and t.type = 4 group by t.type) as Column4
FROM
(SELECT distinct id
FROM table2 t
WHERE (t.type in (1, 2, 3, 4))
AND t.value between '2010-01-01' and '2010-01-07') as subquery
LEFT JOIN table a ON a.id = subquery.id
【问题讨论】:
-
这是在什么数据库上?以及数据库的版本(例如 sql server 2000、2005 或 2008?)
标签: sql subquery query-optimization