作者:拍友2602937077 | 来源:互联网 | 2023-10-16 20:23
有两张一样的表,索引不只一个字段,怎样选出在一个表中有而在另一个表中没有的字段。比如t_at_b的结构是(zd1:char(10),zd2:integer,zd3
有两张一样的表,索引不只一个字段,怎样选出在一个表中有而在另一个表中没有的字段。比如
t_a t_b 的结构是
(
zd1 :char(10),
zd2 :integer,
zd3 :char(20)
)
13 个解决方案
两张一样的表???
一个表中有而在另一个表中没有的字段???
那还一样?
question not clear , do you mean the data exist in t_a but not in T_b
in that case , very easy
select zd1 from t_a where zd1 not in (select zd1 from t_b)
你是指两个表中,在索引上不同的字段.
如果你的索引都是单个字段上的索引.
如下:
Select Column_Name From User_Ind_Columns
where Table_name = 'T_A'
minus
Select Column_Name From User_Ind_Columns
where Table_name = 'T_B'
select column_name from user_ind_columns where table_name='T_A'
minus
select column_name from user_ind_columns where table_name='T_B'
select * from user_indexes where table_name = 'T1';
select * from user_indexes where table_name = 'T2';
我曾经有 两张表,tablea,tableb,结构一样,table1.id=table2.id,可是table1的记录在table2中可能没有,但是table2 中的记录在table1肯定有,现在我要列出如下结构,怎么办;
table1 table2
id id
id
id id
我是这个意思,我的两张表结构完全一样,主键也一样比如
tab_a (
aa char(10),
bb integer ,
cc char(5),
dd char(4)
)
tab_b(
aa char(10),
bb integer ,
cc char(5),
dd char(4)
)
两张表的主键一样,我想找出在tab_a 中有,但在tab_b 中没有的记录,如果表的主键是一个字段比如aa ,可以写成
select * from tab_a where aa not in ( select aa from tab_b)
但如果主键是(aa,bb)怎么班呢?总不能写成
select * from tab_a where (aa ,bb) not in ( select aa,bb from tab_b)
我想知道有没有类似的写法?谢谢哈
你有没有侧过你写的这句sql?
select * from tab_a where (aa ,bb) not in ( select aa,bb from tab_b)
这句没有错!
select * from test_1
A1 A2 A3
aa 1 aa
bb 2 bb
cc 3 cc
dd 4 dd
ccc 3 dd
select * from test_2;
A1 A2 A3
aa 1 aa
bb 2 bb
cc 3 cc
ddd 4 dd
dd 5 dd
ccc 4 dd
select * from test_1 where (a1,a2) not in (select a1,a2 from test_2);
A1 A2 A3
dd 4 dd
ccc 3 dd
select * from table1
minus
select * from table2
上面的写法我都测试过了,还是不行,我现在用的是informix数据库,用的是
dbaccess测试,类似sqlplus,但可视话比较好,还有其他的写法吗,我想用
rowid,但这不准确,原来程序用的是游标,我想用几条语句改写,我的开发是这样的,我要做一个监督系统,系统里我按两种方式入帐,那么就会生成两套系统,我通过比较系统表的内容,写出监督结果,就有两张相同的表,设为t1,t2,分三部分,(1)t1 中有,t2中没有,(2)t2中有,t1没有 (3)t1,t2 都有但要素不同,比如余额不同等,原来用的是游标,我改写成批量的sql语句,第(3)肯定可以搞定,但(1)(2)的情况,有的表主键是两个以上字段,我写了几次都没有成功,大家看有没有标准的sql可以实现。谢谢
可以用rowid 写
select rowid from tab_a where rowid (select rowid
from tba_b );
然后按rowid选出就可以了,但是我不知这样有没有问题。我最后这样写的
select rowid from tab_a where rowid (select rowid
from tba_b ) into temp tmp_aa;
select * from tab_a where rowid in (select * from tmp_aa);
这个问题可以解决了,我在基本数据操作这边问了,写法如下:
select * from tab_a
where not exists (
select * from tab_b
where tab_b.aa=tab_a.aa
and tab_b.bb=tab_b.bb
)