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_B
或 Table_C
.
如何根据条件 运行 给定的 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_B
或 Table_C
.