独特的三排表行

时间:2017-03-22 20:22:25

标签: sql oracle join

我有三个表,并且所有三个表都有相同的请求ID字段。

  • Sched_G包含所有数据
  • 其中Sched_P和Sched_I中的每一行都存在于Sched_G中。
  • 但不是Sched_G的每一行都存在于P或I.

我正在寻找Sched_G和Sched_I中存在的所有行,但在Sched_P中不存在。

请求ID与所有三个表的主键相同。哪种方式最简单?我尝试使用Join语句但卡住了,并且还有g.primary_key = r.primary_key,但是这会导致没有数据出现。有什么帮助吗?

3 个答案:

答案 0 :(得分:1)

这给了你我所有的G

SELECT G.*
FROM G
JOIN I
  ON G.Request_id = I.Request_id

现在你想知道哪些不在P

SELECT G.*
FROM G
JOIN I
  ON G.Request_id = I.Request_id
LEFT JOIN P 
  ON G.Request_id = P.Request_id
WHERE P.Request_id IS NULL

答案 1 :(得分:1)

如果您使用的是Oracle,也可以使用MINUS:

select * 
from Sched_G t1 join Sched_I t2 on t1.RequestID= t2.RequestID
minus
select RequestID from Sched_P

答案 2 :(得分:0)

  

我正在寻找Sched_G和Sched_I

中存在的所有行

做一个INNER JOIN

select sg.* from sched_g sg inner join sched_i si
on sg.id = si.id;

然后执行LEFT JOIN

select xxx.*
from (
    select sg.* from sched_g sg inner join sched_i si
    on sg.id = si.id ) xxx
left join sched_p sp on xxx.id = sp.id
where sp.some_col is null;