2012-04-23 44 views
2

真的希望有人能幫到這個。我確信有更好的方法來構建我的數據,但是由於時間限制,如果可能的話,最好爲當前結構提供解決方案。MySQL - 加入一行表格作爲另一列的列表

我有2代表具有以下結構:

表1

id field1 
1 quest1 
2 quest2 
3 quest3 

表2

id uid quest1 quest2 quest3 
1 18 yes  no  yes 
2 27 yes  no  no 

基本上,我需要返回表1與表2的行(基於uid),格式如下:

id field1 field2 
1 quest1 yes 
2 quest2 no 
3 quest3 yes 

這可能嗎?在網上查看我不斷遇到Pivot Tables和Crosstab Queries,但他們似乎無法實現我所追求的目標......除非我錯了? (我可能是哈哈)。

欣賞任何人都可以爲此付出的幫助。

馬特

+0

我不清楚你的輸出中的field2來自哪裏,以及當沒有與table1中的id相匹配的uid值時你如何在uid上進行連接。 – RedFilter 2012-04-23 14:30:58

+0

抱歉的困惑。字段2在理論上是表2中的行之一,因此本質上是WHERE uid ='18'。這有幫助嗎? – 2012-04-23 14:44:05

+0

@eggyal謝謝你的解答,但是沒有一個答案給了我後來的結果,但我認爲這取決於我對問題的解釋,而不是人們對我之後的理解的理解。然而,在我看了我想做的事情之後,在我看來,我正在試圖製作一個適合圓形孔的方形塊,所以我決定採用一種不同的方法,將數據存儲在單獨的數組中並以這種方式使用它們這整個事情是一個使用CodeIgniter的PHP項目的一部分。感謝您的答案,雖然我非常感謝,因爲我實際上學到了一些東西 – 2012-04-27 09:46:35

回答

2

MySQL不支持數據透視表/交叉表查詢。

它有時會受到批評,但辯護是它是一個功能,而不是缺陷:-)樞軸查詢更多地屬於表示層,因爲他們創建的數據庫不是數據庫意義上的表。所以他們更多的屬於從數據庫中提取數據的應用層。

0
select t1.id, t2.field1, t2.field2 
from table1 t1 
inner join (
    select id, 'quest1' as field1, quest1 as field2 from table2 
    union all 
    select id, 'quest2' as field1, quest2 as field2 from table2 
    union all 
    select id, 'quest3' as field1, quest3 as field2 from table2 
) t2u on t1.id = t2.id 
where t2.uid = 18 
1
SELECT t1.*, CASE t1.field1 
    WHEN 'quest1' THEN t2.quest1 
    WHEN 'quest2' THEN t2.quest2 
    WHEN 'quest3' THEN t2.quest3 
END AS field2 
FROM t1, t2 
WHERE t2.uid = 18; 

看到它的sqlfiddle

相關問題