我有以下架构
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中可能存在或不存在与std相对应的条目。
我想编写一个读取类似内容的查询 “获取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;
答案 0 :(得分:4)
你可以试试这个:
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'