如何确定两个表之间共享哪些列?

11 sql sql-server join

这里对SQL Sever很新......我理解连接表等的概念但是确定共享哪些列的最简单方法是什么?

比如说我们有表1和表2,假设表1有超过100列,表2也是如此,但它们只有1列共同.

是否有一种简单的方法来检查哪些列/如果有任何共享而不烦人地进入和检查?

相当琐碎的问题,但非常有用.谢谢

Cha*_*had 13

您可以在INFORMATION_SCHEMA表格中找到这样的数据.从技术上讲,这些比sys视图更标准化.(见这个问题.)

这是您可以使用的查询:

select A.COLUMN_NAME
from INFORMATION_SCHEMA.COLUMNS A
join INFORMATION_SCHEMA.COLUMNS B
  on A.COLUMN_NAME = B.COLUMN_NAME
where A.TABLE_NAME = 'table1'
  and B.TABLE_NAME = 'table2'
Run Code Online (Sandbox Code Playgroud)

如果需要指定模式以避免名称冲突,请A.TABLE_SCHEMA = 'dbo'where子句中添加etc.


Mar*_*ith 6

这很可能表明一个基本的设计问题,但要查找两个表共享的列名,有几个选项:

SELECT name 
FROM sys.columns 
WHERE object_id IN (object_id('dbo.Table1'),
                    object_id('dbo.Table2'))
GROUP BY name
HAVING COUNT(*) = 2
Run Code Online (Sandbox Code Playgroud)

或者

SELECT name 
FROM sys.columns 
WHERE object_id = object_id('dbo.Table1')
INTERSECT
SELECT name 
FROM sys.columns 
WHERE object_id = object_id('dbo.Table2')
Run Code Online (Sandbox Code Playgroud)