使用Mysql进行复杂查询

时间:2016-04-26 20:32:39

标签: mysql sql querying

我有以下架构

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;

1 个答案:

答案 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'