我想在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/

10-16 00:23