【发布时间】:2020-10-22 00:05:45
【问题描述】:
假设我在两个不同的数据库houses 和apartments 中有一个名为static 的表。
static表包含house_size、no_rooms、pool、spa等房屋的静态信息。
houses 数据库中的static 表有这样的列:
pool spa house_size sauna no_rooms
1 1 25 1 2
1 0 35 1 3
apartments 数据库中的static 表有这样的列:
pool spa house_size sauna
1 1 25 1
1 0 35 1
我想在查询下方运行而不引发任何错误。目前,我收到错误消息,因为apartments.public.static 中不存在no_rooms 列。
select pool, case when spa = 1 then 1 else 0 end as has_spa,
sauna, house_size, case when no_rooms > 2 then 1 else 0 end as rooms
from static;
我尝试过的解决方案:
WITH static_new AS (SELECT s.*
FROM (SELECT 0 AS no_rooms) AS dummy
LEFT JOIN LATERAL
( SELECT
pool, spa, sauna, house_size, no_rooms
FROM static
) AS s on true)
SELECT * FROM static_new;
它可以工作,但是当涉及更多列时,此查询会变得混乱。
我在寻找什么:
-
创建一个接受列名和表名的函数,然后执行我在上述查询中所做的连接并返回一个表。 (应该是通用的,适用于参数中给定的列名和表名并返回一个表。)
-
还有其他漂亮整洁的解决方案吗?
【问题讨论】:
-
只需将
no_rooms添加到没有它的表中即可修复数据。或者在两个数据库中创建一个与添加值的名称相同的视图。
标签: sql postgresql plpgsql dynamic-sql