【问题标题】:better alternative for this complex mysql query这个复杂的 mysql 查询的更好选择
【发布时间】:2014-01-08 10:43:31
【问题描述】:

我有两张桌子

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

问题:我上面的查询很慢。我只是想知道上面的查询还有其他更好的选择吗?

提前致谢。

【问题讨论】:

  • 转换为正确的连接。自从JOIN 被添加到 sql 标准以来已经 20 多年了。来吧...开始使用程序

标签: mysql select group-by


【解决方案1】:

试试这个:

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 

【讨论】:

  • 感谢您的回复。您能否详细说明您使用 MAX 的原因?
  • 注意CASE符合SQL标准
  • @Mrcoder 在没有 MAX/GROUP BY 的情况下尝试。这基本上是一个避免 NULL 结果的技巧。
  • @Strawberry 感谢您的评论,但我对这里使用 MAX 感到困惑,请详细说明
  • saharsh +1 快速解决方案,并会在几分钟内接受它
猜你喜欢
  • 2013-03-16
  • 2013-08-29
  • 1970-01-01
  • 2010-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多