我需要你的帮助。
假设我们有3个表A,B和C,如下图所示:
我希望使用一个sql请求获取表B中存在或不存在的表A中的行,以及表B中存在或不存在的表中的行。
我试过这个但是不起作用:
SELECT A.ATS0804, C.ATS0207, A.ATS0959, A.ATS0802, B.ATS0827
FROM
ISUT183.ENS0042 B
RIGHT JOIN ISUT183.ENS0038 A
ON B.ENS0038K = A.ATS0804
RIGHT JOIN ISUT183.EN00041 C
ON B.EN00041K = C.AT02812
WHERE ( C.ATS0207 = '0001757430'
AND B.ATS0823 = '9999-01-01'
AND A.ATS0803 = '9999-01-01'
AND A.ATS0959 = '61384352001'
AND A.ATS0802 ='01.01.2010'
) ;
答案 0 :(得分:0)
如果在where子句中测试表B中的相等性,则左外连接或右外连接不取空 你没有在A和C之间加入,那么你可以做一个UNION ALL 但是你必须在selection子句中使用相同类型的列(ID1相同类型的ID2)
select * from (
select 'A-B' typejoin, A.ID1 as IDA_OR_C, B.ID1 as IDB from A left outer join B on A.ID1=B.ID1
union all
select 'A-C' typejoin, C.ID2 as IDA_OR_C, B.ID2 as IDB from C left outer join B on C.ID2=B.ID2
) tmp
where ....
答案 1 :(得分:0)
你也可以进行交叉加入:
with AB as (
select * from A left outer join B on A.ID1=B.ID1
),
AC as (
select * from C left outer join B on C.ID2=B.ID2
)
select * from AB CROSS JOIN AC
答案 2 :(得分:0)
使用where exists
和where not exists
条款