2014-10-09 66 views
0

我有一堆引用某些其他表(零個,一個,兩個或多個)的表。T-SQL:與所有從屬表連接並生成笛卡爾積的查詢

我的示例表可能包含以下幾列:

Id | StatementTable1Id | StatementTable2Id | Value 

其中StatementTable1將包含以下幾列:

Id | Name | Label 

我希望得到所有可能的組合,並加入他們。 我發現這個link非常有用(查詢產生關於依賴關係的信息)。

如下我會想象我的代碼:

  1. 準備,我想查詢表的清單。
  2. 查詢link爲我所有的表和保存結果到臨時表。
  3. 檢查從屬表的最大數量。準備查詢模板 - 例如,如果從屬表的最大數量是相等的兩個:

    Select 
        Id, '%Table1Name%' as Table1Name, 
        '%StatementLabelTable1%' as StatementLabelTable1, 
        '%Table2Name%' as Table2Name, 
        '%StatementLabelTable2%' as StatementLabelTable2, Value" 
    
  4. 使用光標 - 每個從屬表替換從屬表的名稱,並在其中的元素標籤的適當部分。

  5. 當所有從屬表已被使用 - 用空字符串替換所有剩餘的列。
  6. 添加「UNION ALL」,並繼續下一表
  7. 運行查詢

你能告訴我,如果有任何更容易或更好的方法?

回答

1

你在那裏列出的內容聽起來像你需要做的事情,如果你不知道列的細節提前。有可能會有一些試驗和錯誤,以確保細節正確,但這是一個很好的計劃。

這就是說,你爲什麼要做這樣的事情?這聽起來像是你需要縮小你對實際需要的數據的要求。否則,當你將數據添加到數據庫時,這個查詢和結果數據集將很快變得非常不便(這些數據集是你聽到的有關成爲每日「門禁報告」的種類;沒有人使用它們,但他們從不記住爲什麼它被創建,所以他們繼續運行報告,並將其用作門禁)。