Postgresql 基于existense动态选择不同表中的字段
我有两张桌子A和BPostgresql 基于existense动态选择不同表中的字段,postgresql,Postgresql,我有两张桌子A和B 两个表的列数相同 表A始终包含表B的所有ID 需要首先从表B中获取行,如果它不存在,则具有 从表A中取出 我试着动态地做这件事 select CASE WHEN b.id is null THEN a.* ELSE b.* END from A a left join B b on b.id = a.id 我认为这种语法是不正确的 有人可以建议如何继续。看起来您希望从表A中选择所有列,但
select
CASE
WHEN b.id is null THEN
a.*
ELSE
b.*
END
from A a
left join B b on b.id = a.id
我认为这种语法是不正确的
有人可以建议如何继续。看起来您希望从表A中选择所有列,但表B中存在匹配ID时除外。在这种情况下,您希望从表B中选择所有列 只要两个表中列的数量和类型兼容,就可以使用此查询完成此操作:
select * from a where not exists (select 1 from b where b.id = a.id)
union all
select * from b
如果列的数量、类型或顺序不同,则需要明确指定每个子查询中要返回的列。您的想法是正确的。您不能使用
*
但是,您必须列出它自己的大小写表达式中的每一列。另外,您可以使用COALESCE()
而不是CASE
像一样选择COALESCE(a.id,b.id)作为id,COALESCE(a.foo,b.foo)作为foo,COALESCE(a.bar,b.bar)作为bar从a左连接到b,b.id=a.id
@JNevill。谢谢你的留言。有没有更好的方法来代替逐个字段检查?太棒了。这就是我要找的。非常有用。