繁体   English   中英

使用Mysql的复杂查询

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM