当A.PUID = B.EUID和A.PID <> B.LID时,如何从结果中排除PUID的所有记录

表A
PUID PID PCODE
100 1003 RG
200 1006 CA
200 1007 CA
300 1008 RG表B
EUID LID ECODE
100 1003 RG
100 1004 RG
100 1005 RG
200 1006 CA
300 1009 RG预期结果
PUID PID ECODE
300 1008 RG尝试了不存在,但没有工作。表的屏幕打印
发布于 2020-11-14 07:48:53
您可以尝试下面的- 演示
select A.* from A
join
(
select A.puid
from A left join B on A.puid=B.puid and A.pid=B.pid
group by A.puid having sum(case when B.pid is null then 0 else 1 end)=0
)X on A.puid=X.puid发布于 2020-11-14 07:37:09
查看一下数据库的联接逻辑,如果您在一个列上联接,您可以选择那些相同(包含)或空(不包含)的连接,有不同类型的连接可以与where语句结合使用,在作业分配中您的导师希望您理解和应用它们。
打开google,查看连接,或者查看这个join.asp
发布于 2020-11-14 13:34:52
我想我应该使用一个left join和窗口函数:
select a.*
from (select a.*,
count(b.euid) over (partition by a.puid) as num_matches
from a left join
b
on a.puid = b.euid and a.pid = b.lid
) a
where num_matches = 0;这里是db<>fiddle。
https://stackoverflow.com/questions/64831023
复制相似问题