2017-01-26 6 views
0

テーブルから別のレコードを表示しようとしていますが、機能しません。ここでテーブル1に表示テーブル2が存在する場合は、テーブル3のテーブル3がSQLのレコードに表示されます

私が持っているALL_RECORDテーブル

ID NAME STUD_ID INFO 
1  Jose 123456 abcd 
1  Jose <null> abcd 
2  Ann  123457 abcde 
2  Ann  <null> abcde 
3  Kyle 123444 abcdq 
4  Cynt <null> abcdw 
4  Cynt 111112 abcdw 

マイALL_RECORDテーブル値が私RECORD1とRECORD2

RECORD1表

ID NAME STUD_ID INFO 
1  Jose <null> abcd 
2  Ann  <null> abcde 
4  Cynt <null> abcdw 

RECORD2の表から挿入された

ID NAME STUD_ID INFO 
1  Jose 123456 abcd 
2  Ann  123457 abcde 
3  Kyle 123444 abcdq 
4  Cynt 111112 abcd 

何を表示したいか

ID NAME STUD_ID INFO 
1  Jose <null> abcd 
2  Ann  <null> abcde 
3  Kyle 123444 abcdq 
4  Cynt <null> abcdw 

注意してください。 3.

私のテストQuery1を

select distinct(id), name, stud_id, info from ALL_RECORD; 

私のテストQUERY2

select * from ALL_RECORD where id is null; 

私のテストquery3

select * from ALL_RECORD where id is null and id in (select * from record2) group by id; 

まだ

+1

「関連がありません」は**機能ではありません**。選択リストの**すべての**列には常に適用されます。 'distinct id、name'または' distinct id、(name) 'と同じもの –

+0

"テーブル1にテーブルが存在する場合は、テーブル2を表示します。したがって、レコードが表1に存在しない場合、存在しないレコードを表示しますか? –

答えて

0

することができます正しい出力を得ることができませんこれで窓関数:

select id, name, stud_id, info 
from (
    select id, name,stud_id,info, 
      row_number() over (partition by id,name order by stud_id nulls first) as rn 
    from all_record 
) t 
where rn = 1; 

ROW_NUMBER()はorder by句で指定したソート基準に基づいて連続番号が割り当てられます。 nullの値の上位「優先度」が0以外の値になるようにするには、nulls firstを使用して行番号1を指定する必要があります。id,nameの値がNULLの複数の行がある場合stud_idこれは任意のものを選びます。

+0

それは動作します、私はウィンドウの機能に精通していないよ。ありがとう:) – ddddddd

0

すべてのtable2レコードと、table2にIDが見つからないtable1レコードを表示するとします。

select id, name, stud_id, info from table2 
union all 
select id, name, stud_id, info from table1 where id not in (select id from table2) 
order by id; 
+0

テーブルALL_RECORDが存在する – ddddddd

+0

あなたはあなたのクエリ#3を書くことができたのは驚くべきことです。 –

+0

テストクエリ#3は動作していません – ddddddd

関連する問題