簡體   English   中英

SQL Server-查詢以生成從一個表到另一個表的JOINs路徑?

[英]SQL Server - A query to generate a JOINs path from one table to another?

如果我知道我需要將表4聯接到表1上,但是它們沒有共同的列,那么需要花一些力氣才能找到具有與表1共同的列A的表2,然后找到具有共同的列B的表3。表2和表4,依此類推,最終可以將表4拉入查詢。

有時需要聯接幾個不必要的表才能使兩個需要聯接的聯接。 在某些表設置中,這可能是必不可少的,但是您將如何查詢以便SQL為您創建該路徑,從而省去了弄清楚它的麻煩?

編輯:那呢? (感謝AHiggins讓我走上這條路

    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'

最終,您仍然需要親自查看結果-但是這兩個查詢可能有助於加快花在周圍的時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM