【问题标题】:Return columns from one table that doesn't exist on another从一个表中返回另一个表中不存在的列
【发布时间】:2025-12-12 20:20:03
【问题描述】:

我需要验证一个表中的某些列是否存在于另一个表中。

例如,我有一个

表A

x y
1 2
... ...

还有一个

表 B

w x
1 2
... ...

最终的输出应该是:

列w

这可能吗?

【问题讨论】:

  • 你的意思是列中的值?
  • 不是值,我的意思是列。这是因为我有一个包含近 100 列的表和另一个包含很多列的表,我必须将数据从一个表插入到另一个表中,并且某些列在两个表上是相同的,而另一些则不是,所以我必须检查哪个列与每个表相关,以及我要插入哪些列

标签: sql oracle


【解决方案1】:

使用ALL_TAB_COLUMNSMINUS。像这样:

SELECT column_name
FROM   all_tab_columns 
WHERE  owner = 'whoever owns TABLE_A'
AND    table_name = 'TABLE_A'
MINUS
SELECT column_name
FROM   all_tab_columns 
WHERE  owner = 'whoever owns TABLE_B'
AND    table_name = 'TABLE_B'

这将返回存在于TABLE_A 但不存在于TABLE_B 中的任何列的名称。

【讨论】:

  • 表或视图dba_tab_columns不存在
  • 它确实存在,你可能只是没有访问权限。请改用“ALL_TAB_COLUMNS”。
  • 用'ALL_TAB_COLUMNS`编辑你的答案,它对我有用
  • 我刚刚删除了所有者条件
【解决方案2】:

检查表中的列的最简单直接的方法是使用列系统视图的信息架构。为 INFORMATION_SCHEMA.COLUMNS 编写一个选择查询,如下所示。如果查询返回记录,则该列在表中可用。 USE {{Database Name}} SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '{{Table Name}}' AND COLUMN_NAME = '{{Column Name}}'

【讨论】:

  • 请改进 sql 代码格式。每条语句在一分钟内写成一行。使用从哪里选择和
最近更新 更多