我想在Postgresql过程中做这样的事情
Select *
into MyVar
from Tab1
Where <Somecondition> limit 14;
If Num_of_Records < 14 Then
Append
Into MyVar
Select *
from Tab1
Where <Relaxedcondition>
limit 14 - Num_of_Records;
End If;
return Myvar
最好的方法是什么?
最佳答案
实际上,我们可以使用简单的SQL处理您的逻辑:
SELECT *
FROM
(SELECT 1 AS label, * FROM Tab1 WHERE <some condition> ORDER BY col LIMIT 14)
UNION ALL
(SELECT 2 AS label, * FROM Tab1 WHERE <relaxed condition>)
ORDER BY label
LIMIT 14;
这将从第一个查询返回多达14条具有更严格条件的记录。如果返回的值小于14,那么具有宽松条件的第二个查询将能够添加记录,直到总数达到14。
我没有太多写Postgres函数的经验,但是上面的查询也应该在函数中工作。
编辑:
如果要确保第二个查询仅在第一个查询返回的记录少于14条时运行,则可以重构为:
WITH cte AS (
SELECT 1 AS label, * FROM Tab1 WHERE <some condition> ORDER BY col LIMIT 14
)
SELECT *
FROM cte
UNION ALL
(SELECT 2, * FROM Tab1 WHERE <relaxed condition> AND (SELECT COUNT(*) FROM cte < 14))
ORDER BY label
LIMIT 14;
在这种情况下,第二个查询将在
WHERE
子句中失败,并且如果第一个查询返回14个或更多记录,甚至不会迭代。关于postgresql - 在Postgresql中合并两个SQL的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47765659/