2014-01-08 55 views
1

我有兩個表對於這個複雜的MySQL查詢

1.fw_respondent_answers 
2.fw_question_options 

結構更好的選擇是:

fw_respondent_answers

id invitationid qdetailid optionid 
1  2   1   1 
2  2   2   2 
3  2   3   3 
4  3   1   4 
5  3   2   5 
6  3   3   6 

fw_question_options:

id optionname qdetailid 
1 india  1 
2 teacher  2 
3 ok   3 
4 france  1 
5 assistane 2 
6 good   3 

所需的輸出:

invitationid  country profession answer 
    2   india  teacher ok 
    3   france assistant good 

說明:我想有對應於qdetailidoptionid特定invitationid相關的optionnameoptionidfw_question_options(id)的主鍵。

我曾嘗試:

SELECT distinct fra.`invitationid` ,fo.optionname as country, 
fo1.optionname as profession,fo2.optionname as nps 
FROM `fw_respondent_answers` fra,fw_question_options fo, 
`fw_respondent_answers` fra1,fw_question_options fo1, 
`fw_respondent_answers` fra2,fw_question_options fo2 
WHERE fra.`optionid`=fo.id and fra.`qdetailid`=2 
and fra1.`optionid`=fo1.id and fra1.`qdetailid`=1 
and fra2.`optionid`=fo2.id and fra2.`qdetailid`=3 

問題:我上面的查詢非常slow.i只是想知道有沒有其他更好的上述查詢方法嗎?

在此先感謝。

+1

轉換爲正確連接。自從'JOIN'被添加到sql標準已經過去了20年。來吧...得到與程序 – Bohemian

回答

2

試試這個:

SELECT a.invitationid, 
     MAX(IF(a.qdetailid = 1, b.optionname, '')) AS country, 
     MAX(IF(a.qdetailid = 2, b.optionname, '')) AS profession, 
     MAX(IF(a.qdetailid = 3, b.optionname, '')) AS nps 
FROM fw_respondent_answers a 
INNER JOIN fw_question_options b ON a.optionid = b.id 
GROUP BY a.invitationid 
+0

謝謝你的反應。請你詳細說明你爲什麼使用MAX? –

+0

請注意,CASE符合SQL標準 – Strawberry

+0

@Mrcoder嘗試不使用MAX/GROUP BY。這基本上是避免NULL結果的一個技巧。 – Strawberry