2017-03-22 3 views
1

私は3つのテーブルを持ち、3つのテーブルはすべて同じRequest IDフィールドを持っています。3つのテーブルに対する一意の行

  • Sched_GはSched_PとSched_I内のすべての行がSched_Gに存在するすべてのデータ
  • を含みます。
  • はなくSched_Gのすべての行は、PまたはI

私はそれがSched_GとSched_Iに存在するすべての行を探しています中に存在するが、Sched_Pには存在しません。

リクエストIDは同じで、3つのテーブルすべてに対するプライマリキーです。どちらが最も簡単な方法でしょうか?私はJoinステートメントを使ってみましたが、つまずき、g.primary_key = r.primary_keyもかかわらず、データが表示されません。どんな助け?

+0

をあなたが「それ」は存在するすべての行を探しています...何をそれは...ですか**"? **どのテーブルから行**? (あなたは3つのテーブルに共通のコラムがあると言っていましたが、それ以外の場合は別のテーブルであると仮定しています - つまりWHICHテーブルの行ですか?) 'Sched_I'には存在しますが' Sched_P'には存在しない 'Request_Id'あなたは「Sched_G」と「Sched_I」ではなく「...」であると言いました - なぜ彼らがSched_Gにいるかをチェックする必要がありますか?あなたは 'Sched_G'に' Sched_I'のすべての "Request_Id"しかないと仮定しているので、 'Sched_G'と**' Sched_I'をチェックする必要はありません。 – mathguy

+0

いずれにしても、これには結合やMINUSは必要ありません。あなたは「アンチ・ジョイン」(ジョインよりも機能しにくい)が必要です。 'request_idが(schedule_Pからrequest_idを選択していない)' schedule_Iからselect request_idという単純なもの。 – mathguy

答えて

1

これは、今、あなたは、私はそれがSched_Gに存在するすべての行を探しています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 
0

にアレントそれらのどれかを知りたいあなたに私

内のすべてのG
SELECT G.* 
FROM G 
JOIN I 
    ON G.Request_id = I.Request_id 

を与えますそしてSched_Iは

INNER JOIN

を言っています
select sg.* from sched_g sg inner join sched_i si 
on sg.id = si.id; 

その後、Oracleを使用している場合にもMINUSを使用することができ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

行います

select * 
from Sched_G t1 join Sched_I t2 on t1.RequestID= t2.RequestID 
minus 
select RequestID from Sched_P 
関連する問題