我需要根据结果实现条件SELECT
语句
另一个声明。我不想为此目的创建函数,而只是使用条件SELECT
。
我的失败方法如下所示:
DO
$do$
BEGIN
IF SELECT count(*) FROM table1 < 1 THEN
SELECT * FROM table2;
RETURN QUERY;
ELSE
SELECT * FROM table3;
RETURN QUERY;
END IF;
END
$do$
我可以通过在PHP中检查查询结果来完成相同的结果 并基于此,执行另一个查询,但我想知道是否有可能只在PostgreSQL中执行此操作。
答案 0 :(得分:2)
试试这个:
with c as (select count(*) cnt from table1)
select table2.* from table2, c where c.cnt < 1
union all
select table3.* from table3, c where c.cnt >= 1
答案 1 :(得分:2)
如果table2和table3是联合兼容的,那么你可以使用一个SELECT:
SELECT * FROM table2 WHERE NOT EXISTS(SELECT * FROM table1)
UNION
SELECT * FROM table3 WHERE EXISTS(SELECT * FROM table1);