有条件地将字段添加到查询的输出中

时间:2014-09-01 10:50:02

标签: mysql sql

仅当user_answer.user_id = 10

时才想选择user_answer.status

我使用此SQL查询返回多个表的结果(问题 q_t 标记 user_answer

SQL:

select question.text,group_concat(tag.text), count(user_answer.question_id) as tt
from question
left join q_t on question.id = q_t.wall_id
left join user_answer on question.id = user_answer.question_id
left join tag on q_t.tag_id = tag.id
where question.id in (1000001,1000002,1000003,1000004,1000005) 
group by  question.text
order by field(question.id,1000001,1000002,1000003,1000004,1000005)

结果:

text                         text                  tt
where is England?         Geography,Continent      33
how many ...?             sport,Europe              2

我需要在 user_answer 表中添加新的select user_answer.status 条件(仅适用于检索此选择):

select user_answer.status    
where user_answer.user_id = 10

如何添加此条件?

感谢,

2 个答案:

答案 0 :(得分:1)

您可以使用CASE WHEN:

执行此操作
select 
  question.text,group_concat(tag.text), 
  count(user_answer.question_id) as tt, 
  CASE WHEN user_answer.user_id = 10 THEN user_answer.status ELSE NULL END as status
from question
left join q_t on question.id = q_t.wall_id
left join user_answer on question.id = user_answer.question_id
left join tag on q_t.tag_id = tag.id
where question.id in (1000001,1000002,1000003,1000004,1000005) 
group by  
  question.text,  
  CASE WHEN user_answer.user_id = 10 THEN user_answer.status ELSE NULL END
order by field(question.id,1000001,1000002,1000003,1000004,1000005);

如果您希望将状态应用于所有问题,您可以使用MAX:

select 
  question.text,group_concat(tag.text), 
  count(user_answer.question_id) as tt, 
  MAX(CASE 
        WHEN user_answer.user_id = 10 
        THEN user_answer.status 
        ELSE NULL 
       END) as status
from question
left join q_t on question.id = q_t.wall_id
left join user_answer on question.id = user_answer.question_id
left join tag on q_t.tag_id = tag.id
where question.id in (1000001,1000002,1000003,1000004,1000005) 
group by  
  question.text
order by field(question.id,1000001,1000002,1000003,1000004,1000005);

答案 1 :(得分:0)

select question.text,group_concat(tag.text), count(user_answer.question_id) as tt
    ,if((user_answer.id=10),(select user_answer.status),(''))as status
    from question`enter code here`
    left join q_t on question.id = q_t.wall_id
    left join user_answer on question.id = user_answer.question_id
    left join tag on q_t.tag_id = tag.id
    where question.id in (1000001,1000002,1000003,1000004,1000005) 
    group by  question.text
    order by field(question.id,1000001,1000002,1000003,1000004,1000005)