Postgresql select 来自基于条件

Postgresql select from based on condition

如何根据条件 运行 给定的 select 语句?

如果条件(来自 table_A)为真,则来自 table_B 的 select 否则来自 table_C。表没有公共列。

像这样

select case when table_A.flag=true then   
    (select * from table_B ) 
    else
    (select * from table_C ) 
    end
from table_A where ...

上面的当然会失败:more than one row returned by a subquery used as an expression

由于列相同,您可以使用 UNION。类似于:

SELECT *
FROM Table_B
WHERE (SELECT flag FROM Table_A) = true
UNION ALL
SELECT *
FROM Table_C
WHERE (SELECT flag FROM Table_A) <> true

我在这里假设 Table_A 只有一行,但是您可以调整 WHERE 条件中的子查询以获得您需要的 flag

基本思路是设置两个条件,以便一次只有一个条件为真(基于您的flag)。因此,即使它是 UNION,也只有查询的一部分会 return 结果,您最终会得到 Table_BTable_C.