我有两个表说A和B.B是A的子集.我想要做的是:向表A添加一个标志列(仅用于查看,而不是永久地在表中),并且该标志的值应该是对于A和B之间的公共行是yes,对于非公共行是no.例如:
A table
Column1 Column2 Column3
X1 X2 X3
Y1 Y2 Y3
Z1 Z2 Z3
Run Code Online (Sandbox Code Playgroud)
select * from A where column1=Y1; to get B
Run Code Online (Sandbox Code Playgroud)
现在我的最终输出应该是
Column1 Column2 Column3 FLAG
X1 X2 X3 NO
Y1 Y2 Y3 YES
Z1 Z2 Z3 NO
Run Code Online (Sandbox Code Playgroud)
我必须在1 sql语句中的代码块下面的所有内容(提取B和添加标志).我只能提取B.无法添加标志
使用oracle 11.2.0.2.0,sqlplus
使用外连接有条件地链接表A和B,然后使用CASE()语句来测试A中的给定行是否与B中的行匹配.
select a.*
, case when b.column1 is not null then 'YES' else 'NO' end as flag
from a left outer join b
on a.column1 = b.column1
Run Code Online (Sandbox Code Playgroud)
请注意,只有当B.COLUMN1只有0或1个实例时,这才能正常工作.如果B包含任何COLUMN1值的多个实例,那么您可以使用此变体:
select a.*
, case when b.column1 is not null then 'YES' else 'NO' end as flag
from a left outer join ( select distinct column1 from b ) b
on a.column1 = b.column1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10724 次 |
| 最近记录: |