首页 > 解决方案 > T-SQL :: 从 JOIN 中消除双精度

问题描述

我正在用 T-SQL 编写一个允许我列出的查询:

但是当我运行它时,我注意到有双列。我不明白为什么。我知道我可以删除它们,但我相信我在 JOIN 中做了一些事情。

select 
    sys.tables.name as Table_Name,
    sys.columns.name as Column_Name,
    sys.types.name as data_type,
    sys.partitions.rows as [Rows]
from
    sys.columns 
    right join sys.tables
        on sys.columns.object_id = sys.tables.object_id
    right join sys.types 
        on sys.columns.system_type_id = sys.types.system_type_id
    inner join sys.partitions 
        on sys.tables.object_id = sys.partitions.object_id 
where
    sys.columns.name is not  NULL
    and
    sys.types.name != 'sysname'
order by
    Table_Name

标签: sqlsql-servertsqljoin

解决方案


为了消除查询中的重复行,我首先要尝试的是SELECT DISTINCT行,如下所示:

SELECT DISTINCT  --> added an important keyword here
    sys.tables.name AS Table_Name,
    sys.columns.name AS Column_Name,
    sys.types.name AS data_type,
    sys.partitions.rows AS [Rows]
FROM
    sys.columns 
    RIGHT JOIN sys.tables ON sys.columns.object_id = sys.tables.object_id
    RIGHT JOIN sys.types ON sys.columns.system_type_id = sys.types.system_type_id
    INNER JOIN sys.partitions ON sys.tables.object_id = sys.partitions.object_id 
WHERE
    sys.columns.name IS NOT NULL
    AND
    sys.types.name <> 'sysname'
ORDER BY
    Table_Name

推荐阅读