sql - Redshift :根据table_1中是否存在column,创建另一个表并分配column值
问题描述
我在 Redshift 中有一个名为“table_1”的表,列名为“column_name_1”、“column_name_2”、“column_name_3”......“column_m”等。
table_1
column_name_1 column_name_2 column_name_3 column_name_4 .... column_name_m
我想根据以下条件创建一个名为“temp_table”的临时表:
- 选择名为的 3 列
'column_name_1','column_name_2','column_name_3'
我确信它已经存在于'table_1'中。
- 选择我不确定是否存在于“table_1”中的名为“column_n”的列。如果 'table_1' 中存在 'column_n',则按原样选择它,如果不存在,则在 'temp_table' 中创建一个名为 'column_n' 的列,并为其所有行分配一个字符值 'val_n'。
所以我最终的“temp_table”将如下所示:
- 如果“table_1”中存在“column_n”
temp_table
column_name_1 column_name_2 column_name_3 column_n
col_1_val_1 col_2_val_1 col_3_val_1 col_n_val_1
col_1_val_2 col_2_val_2 col_3_val_2 col_n_val_2
col_1_val_3 col_2_val_3 col_3_val_3 col_n_val_3
.... .... .... ....
- 如果 'table_1' 中不存在 'column_n'
temp_table
column_name_1 column_name_2 column_name_3 column_n
col_1_val_1 col_2_val_1 col_3_val_1 val_n
col_1_val_2 col_2_val_2 col_3_val_2 val_n
col_1_val_3 col_2_val_3 col_3_val_3 val_n
.... .... .... ....
我试图从这个链接中得到一些提示:如何使用 SQL 语句测试表中是否存在列,但不知何故,我没有成功测试创建临时表中的条件。
解决方案
这真的很棘手。假设您有某种独特的id
列,您可以这样做:
select t1.column1, t1.column2, t1.column3,
(select column_n -- not qualified on purpose
from table1 tt1
where tt1.id = t1.id
) as column_n
from table1 t1 cross join
(select val_n as column_n) x;
这使用范围逻辑column_n
在子查询中解析。如果该列存在于 中table1
,则使用内部引用来填充该值。如果不是,x
则使用来自的列。在这种情况下没有发生冲突的危险,因为table1
没有列。
推荐阅读
- mysql - 在springbatch中连接到数据库时表不存在
- python - 将文件名和大小发送到另一个表的数据块代码
- reactjs - 使用用户输入更新 useEffect api 调用 url
- html - 如何添加如图所示的导航栏?(HTML CSS)
- php - 数据库的图像输出
- sql - 使用 SQL Server 将新数组附加到 JSON 对象
- png - 尝试在没有经验的情况下更改 PNG 校验和值
- java - spring data elasticsearch嵌套对象查找
- flutter - 将 Scaffold 放入 NestedScrollview 时的奇怪行为?在 SliverAppbar 下剪辑时自动滚动到顶部
- javascript - 如何更新 Stripe 订阅数量?(Node.js)