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'
如果需要指定模式以避免名称冲突,请A.TABLE_SCHEMA = 'dbo'在where子句中添加etc.
这很可能表明一个基本的设计问题,但要查找两个表共享的列名,有几个选项:
SELECT name 
FROM sys.columns 
WHERE object_id IN (object_id('dbo.Table1'),
                    object_id('dbo.Table2'))
GROUP BY name
HAVING COUNT(*) = 2
或者
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')