2017-02-13 3 views
0

で作成された2つのテーブルに対して内部結合を適用する同じテーブルの2つのバージョンがあり、両方の違いを知りたいとします。変更された行を古いテーブルと新しいテーブルに表示されるように、マイナスクエリを2回使用して印刷します。マイナス

ここで、特定の列で変更された行を表示する新しいクエリを追加します。

(select * from NewTable minus select * from OldTable) NewRows 
inner join 
(select * from OldTable minus select * from NewTable) OldRows 
on NewRows.column1 = OldRows.column1 
and NewRows.column2 <> OldRows.column2 

ここで、column1は一意の行IDであり、列2は変更されたプロパティです。

私はのOracle SQL Developerのを実行すると、私はエラーORA-00933を「SQLコマンドが正常に終了していない」、と彼はエラーとしてNewRowsの定義を示し得ます。私も ")NewRowsとして"試みたが、それは動作しませんでした。

次のクエリが機能するため、NewTableとOldTableは互換性があります。

(select * from NewTable minus select * from OldTable) 
union 
(select * from OldTable minus select * from NewTable) 

答えて

0

初めにselect * from追加して試してみてください:

select * from 
    (select * from NewTable minus select * from OldTable) NewRows 
inner join 
    (select * from OldTable minus select * from NewTable) OldRows 
on (NewRows.column1 = OldRows.column1 and NewRows.column2 <> OldRows.column2) 

はまたどこつの値is nullと第二is not nullnulls違い<>のためのあなたの条件は、状況をカバーしていないだろうに注意してください。あなたはおそらく使用する必要があります:

on (nvl(NewRows.column1, 'UNIQUEVAL1') = nvl(OldRows.column1, 'UNIQUEVAL1') 
    and nvl(NewRows.column2, 'UNIQUEVAL2') <> nvl(OldRows.column2, 'UNIQUEVAL2')) 
+0

ありがとう、最初の "選択*から"トリックを追加していただきありがとうございます。 – AVS