我要求通过避免从源复制记录来编写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
看来你实际上想要连接源表(T1)中的所有行,然后通过连接id
和c_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
添加一个简单的不同关键字,它应该工作
SELECT DISTINCT t1.C_NO,t1.SURNAME,t2.id
FROM t1 JOIN t2 ON (t1.id = t2.id)
顺便说一下,我认为您显示的输出数据与您的输入不匹配。没有id'54378'的条目
我认为这可能会有所帮助
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
我相信下面的简单左连接应该按预期工作:
Select distinct T1.SURNAME, T1.ID, T1.C_NO
FROM T1
LEFT JOIN T2 ON T2.ID = T1.ID