0

2 つのテーブルを比較し、結果に応じて対応するにはどうすればよいですか。たとえば、2 つのテーブル (正確な構造) があります: tableA(キー、テキスト) と tableB(キー、テキスト)、および結果テーブル (キー、フィールド、ケース)。

if key is in tableA, but not in tableB --> case: insert
if key is in tableB, but not in tableA --> case: delete
if key is in tableA and in tableB, but the text is different -> update
if key is in tableA and in tableB, and the text is the same -> nothing

結果テーブルは次のようになります。

key | text | case
------------------
1   |  t1  | update
2   |  t2  | delete
3   |  t3  | insert
4   |  t4  | nothing

たった1つのクエリでそれを行うことは可能ですか?

挿入を取得するには(削除の場合はその逆):

SELECT key FROM tableA
MINUS
SELECT key FROM tableB;
4

2 に答える 2

0

これは役に立ちますか?

SELECT NVL (a.key, b.key) AS "KEY",
       NVL (a.text, b.text) as "TEXT",
       CASE
          WHEN a.key IS NOT NULL AND b.key IS NULL THEN
             'Insert'
          WHEN a.key IS NULL AND b.key IS NOT NULL THEN
             'Delete'
          WHEN a.key IS NOT NULL AND b.key IS NOT NULL AND a.text != b.text THEN
             'Update'
          WHEN a.key IS NOT NULL AND b.key IS NOT NULL AND a.text = b.text THEN
             'Nothing'
       END
          "CASE"
  FROM tablea a FULL OUTER JOIN tableb b ON a.key = b.key;
于 2013-02-14T10:17:43.950 に答える
0

次のようなものが必要だと思います:

  select 'IN Table1, NOT Table2', Key_column
    from user_tab_columns
   where table_name = 'Table1'
  MINUS
  select 'IN Table1, NOT Table2', Key_column
    from user_tab_columns
   where table_name = 'Table2'
  )
  UNION ALL
  (
  select 'IN Table2, NOT Table1', Key_column
    from user_tab_columns
   where table_name = 'Table2'
  MINUS
  select 'IN Table2, NOT Table1', Key_column
    from user_tab_columns
   where table_name = 'Table1'
  )

リンクで、この概念のいくつかの例とバリエーションを見つけることができます。

幸運を。

于 2013-02-14T10:10:27.340 に答える