[英]Conditionally add a field to the output of the query
want to select user_answer.status only if user_answer.user_id = 10 仅在user_answer.user_id = 10时才希望选择user_answer.status
I use this SQL query, to return results from multiple tables ( question , q_t , tag , user_answer ) 我使用此SQL查询从多个表( 问题 , q_t , 标签 , user_answer )返回结果
SQL: 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)
result: 结果:
text text tt
where is England? Geography,Continent 33
how many ...? sport,Europe 2
I need to add new select user_answer.status from user_answer table, with condition (only applied to retrieve this selection): 我需要从user_answer表中添加新的select user_answer.status ,并附带条件(仅适用于检索此选择):
select user_answer.status
where user_answer.user_id = 10
how to add this condition? 如何添加此条件?
thanks, 谢谢,
You can do this with CASE WHEN: 您可以使用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);
If you want status to be applied to all questions you can use MAX: 如果您希望将状态应用于所有问题,则可以使用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);
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.