2015-12-29 78 views
0

由於現有的數據庫模式設計不正確,我必須以特殊方式編寫select語句,如this thread中所示。從平面數據集中的父子表中檢索數據

SELECT MAX(CASE WHEN Name = 'C' THEN RelativePath END) AS C, 
    MAX(CASE WHEN Name = 'CC' THEN RelativePath END) AS CC, 
    MAX(CASE WHEN Name = 'S' THEN RelativePath END) AS S, 
    MAX(CASE WHEN Name = 'SC' THEN RelativePath END) AS SC, 
    MAX(CASE WHEN Name = 'R' THEN RelativePath END) AS R, 
    MAX(CASE WHEN Name = 'RC' THEN RelativePath END) AS RC 
FROM myTable 
WHERE ID = pId; 

現在,我需要將其輸出與其父表的select語句連接起來。親子表的結構如下:

Parent 
------------------- 
id -> the primary key 
third_party_id 
createdBy 
createdDate 
... 

Child 
------------------- 
id -> the primary key of its Parent table 
Name 
... 

select語句的我想要的輸出結果是一樣的東西對於一個給定的ID如下:

third_party_id, createdBy, createdDate, C, CC, S, SC, R, RC 

子表可能沒有給定父表鍵的條目。我使用左連接選擇語句,但無法獲得所需的結果。數據庫是mySQL。

如果單個select語句不起作用,如何爲輸出構造一個存儲過程?

+0

請編輯您的問題,並提供樣品數據和預期結果。 –

回答

0
SELECT 
    Parent.third_party_id, 
    Parent.createdBy, 
    Parent.createdDate, 
    Child.C, 
    Child.CC, 
    Child.S, 
    Child.SC, 
    Child.R, 
    Child.RC 
FROM 
    Parent 
LEFT OUTER JOIN 
(
    SELECT 
    ID, 
    MAX(CASE WHEN Name = 'C' THEN RelativePath END) AS C, 
    MAX(CASE WHEN Name = 'CC' THEN RelativePath END) AS CC, 
    MAX(CASE WHEN Name = 'S' THEN RelativePath END) AS S, 
    MAX(CASE WHEN Name = 'SC' THEN RelativePath END) AS SC, 
    MAX(CASE WHEN Name = 'R' THEN RelativePath END) AS R, 
    MAX(CASE WHEN Name = 'RC' THEN RelativePath END) AS RC 
    FROM myTable 
    GROUP BY ID 
) Child ON 
    Child.ID = Parent.ID 
WHERE 
    Parent.ID = pId; 
+0

感謝您的建議。但它不能運行。 ON附近有語法錯誤。我之前沒有看到通過SELECT加入JOIN。 – TeeKai

+0

什麼是確切的錯誤?你在複製/粘貼上面的內容嗎?該聲明在語法上是正確的。 – Lock

+0

我有一個數據庫名稱在Child前面,有些東西喜歡db_foo.Child,在行「Child ON」作爲查詢語句的其餘部分使用的表名引用。這會導致語法錯誤。刪除數據庫名稱後,查詢成功運行。我還發現它不會在行上使用表別名。非常感謝您的幫助。 – TeeKai