如果存在表 B,则从表 B 中获取数据,否则保留表 A(在某些列之后)

Posted

技术标签:

【中文标题】如果存在表 B,则从表 B 中获取数据,否则保留表 A(在某些列之后)【英文标题】:Take data from Table B if it exists, else keep Table A (following some columns) 【发布时间】:2021-05-30 22:54:12 【问题描述】:

我正在尝试实现示例中的内容,其想法是从表 B 中获取数据(如果存在),并且与列 col1=col3 和 col2=col4 相关。 不确定这是否可能使用 SQL


col1  col2   
a     b      
c     d    
e     f         

Table B:

col3 col4   
NULL  x      
y     NULL    
NULL  NULL         


Final_Table:

col1  col2   
a     x      
y     d    
e     f 

【问题讨论】:

看看coalesce (db2tutorial.com/db2-basics/db2-coalesce) SQL 表不是电子表格,它是一个集合。表中没有 Nth 行,因此在没有任何通用唯一标识符之前,无法将 this 行的内容替换为 that 行的内容。 也许使用游标? 您的问题似乎假定了行的顺序。但是 SQL 表代表 无序 集。除非列指定排序,否则没有排序。 这个问题在关系数据库中没有意义。正如@astentx 所说,关系表不是电子表格。投票结束。 【参考方案1】:

您需要有一个主键来比较两个或多个表。如果没有主键是不可能的。

【讨论】:

任何匹配规则都可以,即使它是一个排序人工键。

以上是关于如果存在表 B,则从表 B 中获取数据,否则保留表 A(在某些列之后)的主要内容,如果未能解决你的问题,请参考以下文章

如果 Redshift 中存在表,则从表中删除行,否则忽略删除

如果值存在于多个表中,则从表中获取结果

Redshift:如果值存在,则从表 1 中获取值,否则从表 2 中提取

mysql - 如果不在另一个表中,则从一个表中选择,否则从另一个表中选择

如果存在匹配值,则从另一个表中检索数据 - 否则基于第一个连接条件返回

如何从表 A 中选择表 B 中不存在的记录 [重复]