新手:oracle 两表联查的sql不会写了

时间:2021-12-23 21:56:54
现在有A表和B表,A表是业务表,B表是关系表。
A表2个字段a,b,分别存储公司ID和用户ID
B表2个字段c,d,分别存储公司ID和用户ID
2个表的公司和用户 都是一对多的关系。
由于操作原因,导致A表里面出现了错误数据,有几十条数据是错误的-----错误数据里面,公司ID正确,但是用户ID错填成其他公司的用户ID了。
B表即关系表的数据是绝对正确的
我想通过AB联查,查找出A里面的错误数据

6 个解决方案

#1


不考虑效率的话, 可以用  select A.* from A where A.a||A.b  not in (select B.a||B.b from B);  如果数据量大 可以用中间表。

#2


SELECT * FROM A WHERE (A, B) NOT IN (SELECT C, D FROM S);

#3


SELECT * FROM A t WHERE NOT EXISTS (SELECT 1 FROM B WHERE a=t.a AND b=t.b);

#4


minus也可以呀

#5



SELECT A.* 
    FROM A LEFT JOIN B 
        ON A.A=B.C AND A.B=B.D
 WHERE B.C IS NULL

#6


 

select * from a where exists(select 1 from b where b.c=a.a and b.d!=a.b) 试试

#1


不考虑效率的话, 可以用  select A.* from A where A.a||A.b  not in (select B.a||B.b from B);  如果数据量大 可以用中间表。

#2


SELECT * FROM A WHERE (A, B) NOT IN (SELECT C, D FROM S);

#3


SELECT * FROM A t WHERE NOT EXISTS (SELECT 1 FROM B WHERE a=t.a AND b=t.b);

#4


minus也可以呀

#5



SELECT A.* 
    FROM A LEFT JOIN B 
        ON A.A=B.C AND A.B=B.D
 WHERE B.C IS NULL

#6


 

select * from a where exists(select 1 from b where b.c=a.a and b.d!=a.b) 试试