2017-03-07 122 views
0

對於提出問題所需的詳細信息的長度不滿。使用JOIN(?)有意返回比結果更多的結果

有四張桌子(與研究有關,與體育設施沒有任何關係)。他們如下:

1)假設第一個表是網球場列表,並且假設有數百個可能性(不僅僅是室內和室外)。

------------- 
TENNIS_COURTS 
ID Type 
------------- 
1 Indoor 
2 Outdoor 
… 

2)我們想要注意哪一天他們可以出租。爲了防止多餘的行,我們可以列出單獨的日子(例如,只是一年的第二天,輸入爲「From:2」,「To:2」)或塊(例如,從第24天到第25天,輸入如「From:24」,「To:25」)。在這個例子中,室內場地是最容易獲得的,而室外場地只有兩個日期範圍(冬季顯然不切實際)。

--------------------------- 
     DAYS_AVAILABLE 
ID ProductID From To 
--------------------------- 
1  1   2  2 《 Indoor 
2  2  24  25 《 Outdoor 
3  2  140 170 《 Outdoor 
4  1  280 300 《 Indoor 
5  1  340 345 《 Indoor 
… 

3)我們還想添加一個屬性列表,這些屬性隨着時間的推移會變得相當長。所以不是將它們合併到字段規則中,而是有一個屬性表。

----------------------- 
     ATTRIBUTES 
ID Attribute 
----------------------- 
1 Age of Player 
2 Time of Day 
3 Outside Temperature 
… 

4)最後,我們希望在租賃法庭時考慮考慮因素(或因素)的列表。在這個例子中,傷害風險適用於室內和室外場地,但能見度和溫度僅適用於室外。

-------------------------------------------------- 
        CONSIDERATIONS 
ID ProductID AttributeID Effect   Link 
-------------------------------------------------- 
1  1   1  Risk of injury www… 《 Indoor 
2  2   1  Risk of injury www… 《 Outdoor 
3  2   2  Hard to see  www… 《 Outdoor 
4  2   3  Gets cold  www… 《 Outdoor 
… 

利用上面的各個表,我們想創建一個包含至少一個排在範圍內的每個日期,從當年的第一天開始(其中法院是一個綜合的保存視圖可用)到今年的最後一天(法院可用)。我們也希望重複列出的每一天的適用注意事項。

基於以上示出的數據時,它看起來像這樣:

---------------------------------------- 
      CONSOLIDATED VIEW 
Day  Court  Consideration  Link 
---------------------------------------- 
2  Indoor       《 from DAYS_AVAILABLE 
2  Indoor Risk of injury www… 《 from CONSIDERATIONS 
24  Outdoor       《 from DAYS_AVAILABLE 
24  Outdoor Risk of injury www… 《 from CONSIDERATIONS 
24  Outdoor Hard to see  www… 《 from CONSIDERATIONS 
24  Outdoor Gets cold   www… 《 from CONSIDERATIONS 
25  Outdoor       《 from DAYS_AVAILABLE 
25  Outdoor Risk of injury www… 《 from CONSIDERATIONS 
25  Outdoor Hard to see  www… 《 from CONSIDERATIONS 
25  Outdoor Gets cold   www… 《 from CONSIDERATIONS 
… 

然後,我們可以查詢統一視圖(例如,「SELECT * FROM CONSOLIDATED_VIEW其中天= 24」),以產生一個簡單的輸出像:

Court: Indoor 
Available: 24th day 
    Note: Risk of injury (www…) 
      Hard to see (www…) 
      Gets cold (www…) 

我們想從一個統一的視圖產生,因爲一旦數據被存儲,它不會頻繁改變上述所示的例子中,我們很可能不會在同一時間,無論如何查詢單天。網絡客戶端更有可能將所有行提取到一個大型數組(TBD基於確定總大小),然後將其呈現給用戶而無需進一步的服務器交互。

我們可以單獨使用SQL查詢生成CONSLIDATED_TABLE還是需要執行其他編碼(例如PHP或NodeJS)?

回答

1

在你的問題中真正的交易是:我怎樣才能得到可用天數的列表,所以我可以加入我的其他表併產生我的輸出,對吧?我的意思是,有一個天的列表,所有你需要的是加入其他表。因爲你有一個有限的列表(一年中的幾天),我建議創建一個包含365(或366)天(1,2,3,...)的單個列的表並加入它與你的其他桌子。該查詢將smtg類似於:

SELECT ... -- fields u want 
FROM YOUR_NEW_TABLE n 
JOIN DAYS_AVAILABLE D on (n.DAY between D.From and D.To) 
JOIN ... -- other tables that you need info