2013-11-26 40 views
0
TABLE_MASTER 
    ID Value 
---- ---------- 
    1 MasterValue_1 
    2 MasterValue_2 

TABLE_DETAIL1 
    ID MASTERID Value  DATE 
---- -------- ----------- -------- 
    1 1  SubValue1_1 01.01.2014 
    2 1  SubValue1_2 01.01.2014 

TABLE_DETAIL2 
    ID MASTERID ValueX  DATE 
---- -------- ----------- -------- 
    3 1  SubValue2_1 01.01.2014 
    4 1  SubValue2_2 01.01.2013 

現在我想確定細節表和列價值ValueX在一個選擇 但我需要知道選擇哪個細節加入多個詳細信息表有不同的設計,主表

採樣選擇:

SELECT * FROM TABLE_MASTER n 
INNER JOIN TABLE_DETAIL1 d1 ON d1.ID = m.ID 
INNER JOIN TABLE_DETAIL2 d2 ON d2.ID = m.ID 
WHERE d1.DATE >= GETDATE() OR d2.DATE >= GETDATE() 

結果是類似的東西:

ID Value   ID MASTERID Value  DATE  ID MASTERID ValueX  DATE 
---- ------------- ---- -------- ----------- -------- ---- -------- ----------- -------- 
    1 MasterValue_1 1 1  SubValue1_1 01.01.2014 3 1  SubValue2_1 01.01.2014 
    *** 
    *** 

我需要的東西像一個CASE WHICH JOIN左右

ID Value   DETAILID Value  DATE  
---- ------------- -------- ----------- -------- 
    1 MasterValue_1  1 SubValue1_1 01.01.2014 
    1 MasterValue_1  2 SubValue1_2 01.01.2014 
    1 MasterValue_1  3 SubValue2_1 01.01.2014 

最好的解決辦法是,我可以使用在MSSQL和Oracle

+0

你的問題不是很清楚。你想要的輸出是什麼? – Andrew

+0

是的,它很難解釋。我期望的輸出是我發佈的最後一個代碼塊 –

回答

2

這應該在這兩個Oracle和SQL Server工作(儘管您需要將使用具有正確列標識符的關鍵字的一些列名稱打包):

SELECT M.ID, 
     M.Value, 
     D.ID DETAILID, 
     D.Value DetailValue, 
     D.Date 
FROM TABLE_MASTER M 
LEFT JOIN (SELECT * 
      FROM TABLE_DETAIL1 
      UNION ALL 
      SELECT * 
      FROM TABLE_DETAIL2) D 
    ON M.ID = D.MASTER_ID 
+0

太棒了!隨着INNER JOIN的修改,我正在尋找 –

1

This w在SQl服務器上使用ORACLE,我知道UNION ALL是SQL標準的一部分,所以應該在Oracle上運行。注 - 可能我犯了小錯誤,因爲我實際上沒有這些表格,但這是主意。

SELECT m.ID, m.Value.d1.ID as DetailID,d1.Value as DetailValue,d1.DATE as DATE 
FROM TABLE_MASTER m 
INNER JOIN TABLE_DETAIL1 d1 ON m.ID = d1.ID 
UNION ALL 
SELECT m.ID, m.Value.d2.ID as DetailID,d2.ValueX as DetailValue,d2.DATE as DATE 
FROM TABLE_MASTER m 
INNER JOIN TABLE_DETAIL2 d2 ON m.ID = d2.ID 
+0

,謝謝你的發言。拉馬克有點緊張,我實施了他的版本。但你也得到了讚賞。 –