2017-03-22 28 views
1

我有三個表,並且所有三個表具有相同的請求ID字段。唯一行到三個表

  • Sched_G包括所有數據
  • 其中Sched_P和Sched_I每一行中Sched_G存在。
  • 但不Sched_G的每一行都存在於P或一

我在尋找它存在於Sched_G和Sched_I所有行,但在Sched_P不存在。

請求ID與所有三個表的主鍵相同。這將是最簡單的方法?我嘗試使用Join語句,但卡住了,並且還發現了g.primary_key = r.primary_key,但是這導致沒有數據出現。任何幫助?

+0

您正在尋找地方「它」存在於所有的行...什麼是嗎**」? **從哪個表中排**? (你說這三個表有一個共同的列,但除此之外,我認爲它們是不同的 - 那麼,來自WHICH表的行嗎?)還是隻查找存在於「Sched_I」中而不存在於「Sched_P」中的「Request_Id」?你說「在Sched_G'和'Sched_I'中,但不是在...」 - 爲什麼你需要檢查它們是否在'Sched_G'中?你說'Sched_I'中的每個「行」(我只假設每個「Request_Id」)都存在於'Sched_G'中,所以你不需要檢查Sched_G **和** Sched_I,第二個就足夠了。 – mathguy

+0

在任何情況下,您都不需要連接或'MINUS';你需要一個「反連接」(它比連接工作少)。就像'select request_id from schedule_I',其中request_id不在(從schedule_P選擇request_id)''。 – mathguy

回答

1

這會給你所有的G我

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

現在,你想知道那些P中的arent

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 
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; 
+0

我不認爲你需要一個子查詢呢? –

1

,如果你使用的是Oracle您還可以使用減:

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