【问题标题】:How to search for tables which has 2 common columns in a huge database in sql?如何在 sql 的庞大数据库中搜索具有 2 个公共列的表?
【发布时间】:2015-01-17 08:00:26
【问题描述】:

我正在处理一个庞大的数据库。没有数据库的文档。所以我找到了这个 sql 查询来查找我想要的具有相似列名的表。

SELECT  c.name as ColumnName, t.name as TableName 
FROM sys.columns c
JOIN sys.tables t ON c.object_id = t.object_id
WHERE c.name LIKE '%columnName%' 

我为 2 个不同的列名运行了这个。现在我有 2 个不同的表格列表。但是我如何从中获得常用表呢?我不确定如何为此使用 join,因为它是 2 个单独的查询。 基本上我想找到有 2 个常见列名的表,但我不知道确切的列名。

添加到它我只是对数据库具有读取权限。

【问题讨论】:

  • 那个SQL不行,t是什么?
  • 对不起@DavidG 我在那里跳过了一行代码。我现在已经添加了。
  • 为什么这个标签是mysql

标签: mysql sql-server database sql-server-2008 join


【解决方案1】:

您可以将查询视为这样的表:

SELECT * FROM 
    (SELECT * FROM SomeTable) AS SubQuery

例如:

SELECT *
FROM 
    (SELECT  c.name as ColumnName, t.name as TableName 
    FROM sys.columns c
    JOIN sys.tables t ON c.object_id = t.object_id
    WHERE c.name LIKE '%columnName%') AS Columns1

鉴于您可以这样做,您现在可以将两个查询连接在一起:

SELECT Columns1.TableName, 
       Columns1.ColumnName AS FirstColumnName,
       Columns2.ColumnName AS SecondColumnName
FROM 
    (SELECT  c.name as ColumnName, t.name as TableName 
    FROM sys.columns c
    JOIN sys.tables t ON c.object_id = t.object_id
    WHERE c.name LIKE '%FirstColumnName%') AS Columns1
JOIN
    (SELECT  c.name as ColumnName, t.name as TableName 
    FROM sys.columns c
    JOIN sys.tables t ON c.object_id = t.object_id
    WHERE c.name LIKE '%SecondColumnName%') AS Columns2
ON Columns1.TableName = Columns2.TableName

【讨论】:

  • 你也可以使用 INTERSECT 来减少代码大小
猜你喜欢
  • 2013-10-31
  • 1970-01-01
  • 2011-04-10
  • 1970-01-01
  • 2013-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多