简体   繁体   English

sql-比较表

[英]sql - compare table

How can I compare two tables and react depending on the result. 如何比较两个表并根据结果做出反应。 Eg I have 2 tables (exact structure): tableA(key, text) and tableB(key, text) and a result table (key, field, case). 例如,我有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

the result table looks like: 结果表如下所示:

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

Is it possible to do it with just one query? 仅用一个查询就能做到吗?

to get insert (and vice versa for delete): 获得插入(删除则相反):

SELECT key FROM tableA
MINUS
SELECT key FROM tableB;

I think you need something like this: 我认为您需要这样的东西:

  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'
  )

You can find some examples and variations of this concept in the link: http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1004115105172 您可以在以下链接中找到此概念的一些示例和变体: http : //asktom.oracle.com/pls/asktom/f?p=100 :11:0 :::::P11_QUESTION_ID : 1004115105172

Good luck. 祝好运。

Would this help? 这会有所帮助吗?

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;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM