Sql Oracle:检查是否存在并映射新列
要检查Sql Oracle:检查是否存在并映射新列,sql,oracle,Sql,Oracle,要检查表2中的表1中是否存在id,并在此基础上尝试创建一个新列映射的值。 表_2有大量重复id的记录,并且表上有一个非唯一索引 SQL> drop table table_1 Table dropped. SQL> create table table_1(id varchar2(10),value varchar2(10)) Table created. SQL> insert into table_1 (select '100','ABC' from dual union
表2
中的表1
中是否存在id,并在此基础上尝试创建一个新列映射的值
。
表_2
有大量重复id的记录,并且表上有一个非唯一索引
SQL> drop table table_1
Table dropped.
SQL> create table table_1(id varchar2(10),value varchar2(10))
Table created.
SQL> insert into table_1
(select '100','ABC' from dual
union all
select '101','DEF' from dual
union all
select '103','GHI' from dual
)
3 rows created.
SQL> commit
Commit complete.
SQL> select * from table_1
ID VALUE
---------- ----------
100 ABC
101 DEF
103 GHI
3 rows selected.
SQL> drop table table_2
Table dropped.
SQL> create table table_2(id varchar2(10),value varchar2(10),day date)
Table created.
SQL> insert into table_2
(select '100','ABC',sysdate from dual
union all
select '100','ABC',sysdate from dual
union all
select '100','ABC',sysdate from dual
union all
select '101','DEF',sysdate from dual
union all
select '101','DEF',sysdate from dual
union all
select '101','DEF',sysdate from dual
)
6 rows created.
SQL> commit
Commit complete.
SQL> select * from table_2
ID VALUE DAY
---------- ---------- ---------
100 ABC 18-SEP-18
100 ABC 18-SEP-18
100 ABC 18-SEP-18
101 DEF 18-SEP-18
101 DEF 18-SEP-18
101 DEF 18-SEP-18
6 rows selected.
在下面尝试,但它会获得ID 100和101的重复记录。
我知道,不应该使用外部联接,因为存在重复项。
我希望通过利用表2上的非唯一索引来获得所需的输出,但不重复。
你怎么办
SQL> select t1.*,case when t2.id is null then '***EMPTY****' else t2.id end as mapped_value
from table_1 t1,table_2 t2
where t1.id = t2.id(+)
ID VALUE MAPPED_VALUE
---------- ---------- ------------
100 ABC 100
100 ABC 100
100 ABC 100
101 DEF 101
101 DEF 101
101 DEF 101
103 GHI ***EMPTY****
7 rows selected.
如果我理解正确,一个
存在于案例中
可能就是你想要的
SELECT t1.id,
t1.value,
CASE
WHEN EXISTS (SELECT *
FROM table_2 t2
WHERE t2.id = t1.id) THEN
t1.id
ELSE
'***EMPTY***'
END mapped_value
FROM table_1 t1;
有几个问题。。。所以,您不关心该对(ID,VALUE)是否多次出现在第二个表中,您只想知道它是否出现?它是关于配对(ID,VALUE),而不是关于ID(在表1中),对吗?然后,“新列”只存在于SELECT查询的输出中,不作为存储列添加到表_1中,对吗?问题1-是的,我只想知道它是否出现。问题2-这只是ID
,这就是为什么ID字段上只有索引的原因。问题3-是,新列仅用于selectquery
输出。无需添加到表1中。对不起,如果不清楚的话。