oracle 用于返回具有相同模式的两个表中不相同行的查询

qxgroojn  于 2022-11-03  发布在  Oracle
关注(0)|答案(1)|浏览(157)

我一直在做一段时间的搜索一个特定的问题,但我不能很好地找到这个特定的问题
我有一个相当不寻常的任务要在SQL中完成:
我有两个表,比如A和B,它们具有完全相同的列名,形式如下:
标识符|列_1|一个人。|第n列
这两个表具有相同的行数和相同的id,但是对于给定的id,表A和B中的行有可能在一个或多个其他列中不同。
我希望查询返回表A中与表B中的相应行不同的所有行。
假设表A|识别码|C_标识符|F名称|电话号码|电邮地址|职务名称||:——-|- ————:|- —————:|- —————:|- —————:|- ———————————————-||二十八人|abc公司|某某|小行星50925|小行星19080|软件工程师||二十九人|延迟|锰氧|小行星50926|小行星19081|软件工程师||30个|延迟|脉冲群|小行星50927|小行星19082|软件工程师|
表B|识别码|C_标识符|F名称|电话号码|电邮地址|职务名称||:——-|- ————:|- —————:|- —————:|- —————:|- ———————————————-||二十八人|abc公司|某某|小行星50925|小行星19080|软件工程师||二十九人|延迟|锰氧|小行星50926|小行星19081|数据分析员||30个|延迟|脉冲群|六千元|小行星19082|软件工程师|
结果应该是:|识别码|C_标识符|F名称|电话号码|电邮地址|职务名称||:——-|- ————:|- —————:|- —————:|- —————:|- ———————————————-||二十九人|延迟|锰氧|小行星50926|小行星19081|数据分析员||30个|延迟|脉冲群|六千元|小行星19082|软件工程师|
电话和职务中的值与以前的值不匹配。我需要返回已更新记录的查询。

lmvvr0a8

lmvvr0a81#

使用MINUS

SELECT * FROM table_a
MINUS
SELECT * FROM table_b

其中,对于示例数据:

CREATE TABLE table_a (id, column1, column2) AS
SELECT 1, 1, 1 FROM DUAL UNION ALL
SELECT 2, 2, 2 FROM DUAL UNION ALL
SELECT 3, 3, 3 FROM DUAL UNION ALL
SELECT 4, 4, 4 FROM DUAL;

CREATE TABLE table_b (id, column1, column2) AS
SELECT 1, 1, 1 FROM DUAL UNION ALL
SELECT 2, 2, 1 FROM DUAL UNION ALL
SELECT 3, 3, 3 FROM DUAL UNION ALL
SELECT 4, 4, 5 FROM DUAL;

输出:
| 识别码|第1列|第2列|
| - -|- -|- -|
| 2个|2个|2个|
| 四个|四个|四个|
fiddle

相关问题