重复SQL查询

时间:2015-01-31 19:08:01

标签: sql postgresql

假设这个非常简单的SQL查询:

SELECT * FROM a WHERE time < '2010-01-01'

现在,我如何组装一个查询,其中时间部分实际上是一个'数组'?

以某种方式之间:

SELECT * FROM a WHERE time < ['2010-01-01', '2012-01-01']

Select应该执行两次,但会产生一个结果集。

请注意,此示例数组只包含两个项目,但它可能包含更多项目,因为结果实际上来自子查询。

Postgresql 9.3

4 个答案:

答案 0 :(得分:1)

ANY适用于此,例如:

SELECT * FROM a WHERE time < ANY (SELECT '2010-01-01' UNION ALL SELECT '2012-01-01')

答案 1 :(得分:0)

也许您提供了错误的示例SQL,因为SELECT * FROM a WHERE time < '2012-01-01'将为您提供所有日期,包括'2010-01-01'

如果您只想将两个结构相同的reult集合并为一个,那么UNION运算符将在此为您提供帮助:

SELECT * FROM a WHERE time < '2010-01-01'
UNION
SELECT * FROM a WHERE time < '2012-01-01'

如果您想在两个查询中都包含< '2010-01-01'的结果,则需要使用UNION ALL

答案 2 :(得分:0)

这应该可以解决问题 - 使用ANY,如下所示:

select *
from a
where time < any(array['2010-01-01'::timestamp, '2012-01-01'::timestamp])

答案 3 :(得分:0)

如果你说Time来自子查询,你可以将该子查询包含在Non Equi join(&lt;)中:

SELECT DISTINCT A.*
FROM Table_1 AS A 
INNER JOIN (SELECT DISTINCT Time FROM DATE_Array_Table) AS B
       on (A.Time < B.Time)

表上有INNER JOIN,其中包含日期数组,在这种情况下,您将获得重复项,但只查询具有不同值的表A将很容易解决这个问题。

在这种情况下,您将拥有多少时间值(1,2,3,4,...)并不重要。您已经写过您的最终查询是聚合的,因此请注意我的解决方案中的重复。