为两个表之间的公共行添加标志

use*_*163 2 sql oracle

我有两个表说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

APC*_*APC 7

使用外连接有条件地链接表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)