SQL Server-生成从一个表到另一个表的连接路径的查询?
如果我知道我需要将表4连接到表1上,但它们没有共同的列,那么需要花费一些努力来找到一个表2,其中a列与表1相同,然后是一个表3,其中B列与表2和表4相同,依此类推,最终能够将表4拉入查询 有时需要连接一些不必要的表来连接两个需要连接的表。对于某些表设置来说,这可能是一个必要的缺点,但是如何进行查询,以便SQL为您创建该路径,从而省去计算它的麻烦呢 编辑: 这个怎么样?谢谢你让我走上这条轨道SQL Server-生成从一个表到另一个表的连接路径的查询?,sql,sql-server,join,multiple-tables,jointable,Sql,Sql Server,Join,Multiple Tables,Jointable,如果我知道我需要将表4连接到表1上,但它们没有共同的列,那么需要花费一些努力来找到一个表2,其中a列与表1相同,然后是一个表3,其中B列与表2和表4相同,依此类推,最终能够将表4拉入查询 有时需要连接一些不必要的表来连接两个需要连接的表。对于某些表设置来说,这可能是一个必要的缺点,但是如何进行查询,以便SQL为您创建该路径,从而省去计算它的麻烦呢 编辑: 这个怎么样?谢谢你让我走上这条轨道 SELECT CASE WHEN B.COLUMN_NAME = C.
SELECT
CASE
WHEN B.COLUMN_NAME = C.COLUMN_NAME
THEN D.COLUMN_NAME + ' is on both ' + A.TABLE_NAME + ' and ' + D.TABLE_NAME
ELSE 'ZZZNULLZZZ'
END AS 'QuickJoin',
A.TABLE_NAME AS 'Starting Table',
B.COLUMN_NAME AS 'Column 1',
B.TABLE_NAME AS 'Linking Table',
C.COLUMN_NAME AS 'Column 2',
D.TABLE_NAME AS 'Destination Table'
FROM
INFORMATION_SCHEMA.COLUMNS A
JOIN
INFORMATION_SCHEMA.COLUMNS B ON
A.COLUMN_NAME = B.COLUMN_NAME AND
A.TABLE_NAME <> B.TABLE_NAME
JOIN
INFORMATION_SCHEMA.COLUMNS C ON
B.TABLE_NAME = C.TABLE_NAME AND
A.TABLE_NAME <> C.TABLE_NAME
JOIN
INFORMATION_SCHEMA.COLUMNS D ON
C.COLUMN_NAME = D.COLUMN_NAME AND
D.TABLE_NAME NOT IN (A.TABLE_NAME, B.TABLE_NAME, C.TABLE_NAME)
WHERE
-- Starting Table
A.TABLE_NAME = 'Starting Table'
-- Possible Column 1
-- AND B.COLUMN_NAME = 'siteid'
-- Possible Linking Table
-- AND B.TABLE_NAME = 'possibleLinkingTable'
-- Possible Column 2
-- AND C.COLUMN_NAME = 'possibleColumn2'
-- Destination Table
AND D.TABLE_NAME = 'Destination Table'
ORDER BY
QuickJoin, B.COLUMN_NAME, B.TABLE_NAME, C.COLUMN_NAME
没有一个自动的解决方案,但是,有些事情你可以尝试,将帮助你在正确的方向 一种方法是,如果数据库设置良好,可以查看 另一个可能有用的工具是检查哪些其他表的列与源或目标相同
SELECT A.TABLE_NAME, A.COLUMN_NAME, B.TABLE_NAME
FROM
INFORMATION_SCHEMA.COLUMNS A
INNER JOIN
INFORMATION_SCHEMA.COLUMNS B ON
A.COLUMN_NAME = B.COLUMN_NAME AND
A.TABLE_NAME <> B.TABLE_NAME
WHERE A.TABLE_NAME = 'YourStartingTable' OR B.TABLE_NAME = 'YourDestinationTable'
最终,您仍然需要自己查看结果,但这两个查询可能有助于加快环顾四周的时间。您可以创建一个视图吗?确实没有办法让sql server自动确定如何跨多个表构建联接。需要联接一些不必要的表,如果您需要它们联接其他表,它们显然是必需的。如果有方法自动执行此操作,我将失业。谢谢,我对此进行了调整,并提出了一个查询,这可能有助于手动查找两个表之间没有键的链接表。我把这个问题添加到我原来的帖子中。你怎么认为?