与内获得重复加入和左连接

与内获得重复加入和左连接

问题描述:

我试图获取对列的表以下信息:与内获得重复加入和左连接

1)主键。

2)IsNullable

3)Is_Identity。

查询:

SELECT c.name 'Column Name',c.is_nullable,c.is_identity,ISNULL(i.is_primary_key, 0) 'Primary Key' FROM sys.columns c INNER JOIN sys.types t ON c.user_type_id = t.user_type_id LEFT OUTER JOIN sys.index_columns ic ON ic.object_id = c.object_id AND ic.column_id = c.column_id LEFT OUTER JOIN sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id WHERE c.object_id = OBJECT_ID('[HumanResources].[Employee]') 

我与Adventure Works数据库工作,但这里的问题是我得到OrganizationNode柱2次,我无法理解的原因。

对于其他表我没有得到这个问题,但我只是得到这个问题的表[HumanResources].[Employee]

下面是下载数据库BAK文件的链接:

https://www.dropbox.com/s/nutfat17b73boav/AdvantureWorksSeScript.bak?dl=0

enter image description here

我也曾尝试distinct但因为它打乱了列的排序,你可以看到在第二个输出。 BirthDate is coming at the top instead of BusinessEntityID.

我不喜欢用distinct作为我下面的查询工作正常与所有其他表,但我没有得到为什么它给重复列的情况下,[HumanResources].[Employee]表或可我已经有几桌测试它和对于其他数据库,查询可能无法正常工作。

我不确定我的查询是否正确或者不能在所有场景中工作以获取我提到的3件事(pk,inullable etc.)。

+0

。我没有下拉数据库的副本。我不明白这里的问题是什么。也许你有超过1个指数或指数超过1列? –

+0

因此,您想要列出表和where子句的所有列,并显示它们是否为主键,为空和标识? – SEarle1986

+0

是否有可能该列在多个索引中使用?将索引名称作为列添加到查询中。 – KeithL

如果你想有一个特定的顺序你行有且只有1个办法做到这一点......与order by子句试试这个

SELECT name, 
     is_identity, 
     is_nullable, 
     is_primary_key 
FROM (
      SELECT c.name, 
        c.column_id, 
        c.is_identity, 
        c.is_nullable, 
        ISNULL(i.is_primary_key,0) is_primary_key, 
        ROW_NUMBER() OVER(PARTITION BY c.name ORDER BY c.name) rn 
      FROM sys.columns c 
        JOIN sys.tables t 
         ON t.object_id = c.object_id 
        LEFT JOIN sys.index_columns ic 
         ON c.object_id = ic.object_id AND c.column_id = ic.column_id 
        LEFT JOIN sys.indexes i 
         ON i.object_id = ic.object_id AND i.index_id = ic.index_id 
      WHERE t.name = 'Employee' 
     )keys 
WHERE rn = 1 
ORDER BY column_id 
+0

感谢您的答案,但可以将这2个查询合并到1,以便我只需要执行1个查询? –

+0

修改为使用子查询,而不是临时表.... – SEarle1986

+0

这是搞乱我的列的排序,就像我在查询中添加不同的关键字时一样。我想要得到我列中的确切订单 ,就像我在我的表格中一样。 –