比较两个表并返回两个表中不相等的列名

时间:2018-03-06 11:33:13

标签: sql oracle

我有两个表,TS_SALESTS_SALES_AUDIT

此处TS_SALES是父表,TS_SALES_AUDIT是子表。

当我使用下面的代码计算两个表中的列时,

1) SELECT count(*) FROM user_tab_columns WHERE table_name = 'TS_SALES';
   ---------
   Count(*)
   ---------
      130

2) SELECT count(*) FROM user_tab_columns WHERE table_name = 'TS_SALES_AUDIT';
   ---------
   Count(*)
   ---------
      40

我们可以返回两个表中不相等的列名吗?

3 个答案:

答案 0 :(得分:3)

这应该可以解决问题:

TS_SALES但不在TS_SALES_AUDIT

中的列
SELECT column_name FROM user_tab_columns WHERE table_name = 'TS_SALES'
minus 
SELECT column_name FROM user_tab_columns WHERE table_name = 'TS_SALES_AUDIT'

TS_SALES_AUDIT但不在TS_SALES

中的列
 SELECT column_name FROM user_tab_columns WHERE table_name = 'TS_SALES_AUDIT'
 minus 
 SELECT column_name FROM user_tab_columns WHERE table_name = 'TS_SALES'

答案 1 :(得分:1)

一种方法使用聚合:

select max(table_name) as which_table_name,
       max(column_name) as which_column_name
from user_tab_columns 
where table_name in ('TS_SALES', 'TS_SALES_AUDIT')
group by column_name
having count(*) = 1;

答案 2 :(得分:0)

要获取TS_SALES中存在的列而不是TS_SALES_AUDIT中的列,可以使用以下查询:

A.Col2 as MyCol2Property

要实现相反的目的,请使用以下内容:

SELECT COLUMN_NAME FROM user_tab_columns 
WHERE table_name = 'TS_SALES' 
AND COLUMN_NAME NOT IN 
(
    SELECT COLUMN_NAME FROM user_tab_columns WHERE table_name = 'TS_SALES_AUDIT'
)