如何比较两个表并根据结果做出反应。例如。 我有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
只用一个查询就可以做到吗?
获取插入(反之亦然删除):
SELECT key FROM tableA
MINUS
SELECT key FROM tableB;
答案 0 :(得分: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'
)
您可以在链接中找到此概念的一些示例和变体:http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1004115105172
祝你好运。答案 1 :(得分: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;