0

我的 SQL Server 数据库中共有 10 个表。在那 5 个表中有 21 列,前 5 列和后 3 列同名。

如何编写一个 SQL 查询来选择这 5 个表的名称。

[使用 SQL Server 数据库中的列数和列名选择表名]

例如:-

数据库名称 - SampleDB

SampleDB 中可用的表是

  1. dbo.sample1
  2. dbo.sample2
  3. dbo.sample3
  4. dbo.sample4
  5. dbo.sample5
  6. dbo.sample6
  7. dbo.sample7
  8. dbo.sample8
  9. dbo.sample9
  10. dbo.sample10

在这个表[dbo.sample1,dbo.sample4,dbo.sample5,dbo.sample7,dbo.sample9] 中每个包含 21 列。这 5 个表的前 5 列名称和后 3 列名称相同。我需要一个查询来选择这 5 个表的名称。

输出会像

1 dbo.sample1
2 dbo.sample4
3 dbo.sample5
4 dbo.sample7
5 dbo.sample9

有意义吗?

4

2 回答 2

2

我编写 MS SQL 2012 服务器语法 (TSQL)

解决您的问题的第一步是找出哪些表有 x (21) 个字段。

SELECT
    So.Name AS TableNames,
    COUNT(Sc.Name) AS FieldCounter
FROM
    Sysobjects AS So    -- List of Tables
LEFT OUTER JOIN
    SysColumns AS Sc    -- List of Fields
ON So.id = sc.ID
WHERE
    So.xtype = 'U'      -- only show for **U**ser sables
GROUP BY
    So.name
HAVING COUNT(Sc.Name) = 21 -- 21 fields in table

在此之后,您必须比较归档的名称

于 2016-03-24T11:20:17.290 回答
0

像这样的东西?(在 SQL Server 的情况下)

select t.name, c.name, count(*) as duplicate_count from sys.tables t
inner join sys.columns c on c.object_id = t.object_id
group by t.name, c.name
having count(*) > 1
于 2016-03-24T11:06:22.850 回答