从引用复制的SQL

问题描述 投票:0回答:4

我要求通过避免从源复制记录来编写SQL查询。我有两个表master(T1)和reference(T2)。

主表(T1)

C_NO    SURNAME ID
1234    Jeeju   1111
4567    Balu    1111

参考表(T2)

ID      C_NO
1111    1234
1111    4567
1111    54378

我正在基于ID列进行连接。我的主表(T1)是源和参考表(T2)是我正在做左外连接的那个。当前它用于笛卡尔。我想要输出如下所示来自源的两个记录应该按原样出现,只有来自T2的记录才能复制。

C_NO    SURNAME ID
1234    Jeeju   1111
4567    Balu    1111
54378   Jeeju   1111
54378   Balu    1111
sql oracle
4个回答
1
投票

看来你实际上想要连接源表(T1)中的所有行,然后通过连接idc_no,在引用表中追加任何新记录,例如:

create table t1 (c_no number, surname varchar2(100), id number);
create table t2 (id number, c_no number);
insert into t1 values (1234,'Jeeju',1111);
insert into t1 values (4567,'Balu',1111);
insert into t2 values (1111,1234);
insert into t2 values (1111,4567);
insert into t2 values (1111,54378);

select c_no, surname, id
from t1
union all
select t2.c_no, t1.surname, t2.id
from t2 join t1 on t1.id = t2.id
where not exists (
  select null
  from t1 x
  where x.id = t2.id
  and x.c_no = t2.c_no
);

C_NO    SURNAME ID
======= ======= ====
1234    Jeeju   1111
4567    Balu    1111
54378   Jeeju   1111
54378   Balu    1111

0
投票

添加一个简单的不同关键字,它应该工作

SELECT DISTINCT t1.C_NO,t1.SURNAME,t2.id
FROM t1 JOIN t2 ON (t1.id = t2.id)

顺便说一下,我认为您显示的输出数据与您的输入不匹配。没有id'54378'的条目


0
投票

我认为这可能会有所帮助

declare @tab table (C_NO int,   SURNAME varchar(20),ID int)
insert into @tab values(
1234    ,'Jeeju',   1111),(
4567    ,'Balu',    1111)


declare @tab1 table(ID int,      C_NO int)
insert into @tab1 values (
1111    ,1234),(
1111    ,4567),(
1111    ,54378)


select t2.C_NO,t1.SURNAME,t2.ID
from @tab t1
inner join @tab1 t2 on t1.C_NO <> t2.C_NO

产量

C_NO    SURNAME ID
1234    Balu    1111
4567    Jeeju   1111
54378   Jeeju   1111
54378   Balu    1111

0
投票

我相信下面的简单左连接应该按预期工作:

Select distinct T1.SURNAME, T1.ID, T1.C_NO 
FROM T1
  LEFT JOIN T2 ON T2.ID = T1.ID
© www.soinside.com 2019 - 2024. All rights reserved.