[英]Complex query using Mysql
我有以下架构
table Std
--------------
id int(11)
conf_id varchar(100)
name varchar(255)
for_all_sponsors tinyint(1)
table sts
------------
task_def_id int(11) NO
sponsor_id int(11) NO
status varchar(255) NO
加入条件为sts.task_def_id = std.id。
现在,对应于std的sts中可能存在或可能没有条目。
我想编写一个查询,其内容如下:“获取std中所有for_all_sponsors = 1且conf_id设置为'c'的条目。如果sts中有一个Sponsor_id设置为'5'的条目,则获取状态。如果没有将Sponsor_id设置为'5'的条目,则默认为'默认状态'。”
第一部分可以通过左外部联接来实现,其中Sponsor_id = 5。
默认状态部分比较棘手。 有没有办法使用单个查询来做到这一点?
什么是最有效的查询方式,
我到目前为止所拥有的是
select * from std left outer join sts on std.id=sts.task_def_id where std.for_all_sponsors=1 and std.conf_id='c' and sts.sponsor_id=5;
您可以尝试以下方法:
SELECT Std.*,
CASE WHEN sts.status IS NULL THEN 'default status' ELSE [status] END as Status
FROM Std
LEFT JOIN sts ON Std.id = sts.task_def_id AND sponsor_id = 'x'
WHERE for_all_sponsors = 1
AND conf_id = 'c'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.