0

第一个表是service表,第二个表是reservation表。

我的要求是:首先我需要从服务表中选择 service_id,amount 并且如果所选的 service_id 在特定日期的预订表中存在,那么我需要按原样选择 total_seats 值。如果从服务表中选择的服务 ID 在预订表中的特定日期不存在,那么我需要将 total_seats 值选择为 60。

----------------------       
| service_id |amount |   
----------------------   
| 3000       | 500   |   
----------------------   
| 3001       | 300   |   
----------------------   
| 3002       | 800   |   
----------------------   

---------------------------------------   
| bus_service_id |  DOJ       |total_seats  
------------------------------------------  
|  3002          | 2013-10-11 |   23    
------------------------------------------  
|  3001         | 2013-10-6   |   26    
------------------------------------------  
|  3001         | 2013-10-12  |  50    
------------------------------------------
|  3000         | 2013-10-6   | 41  
------------------------------------------  

请帮助我如何做到这一点?我需要传递一个输入参数 DOJ。

4

2 回答 2

1

这将做到:

SELECT IFNULL(total_seats, 60) total_seats
FROM service_table s
LEFT JOIN reservation_table r
ON s.service_id = r.bus_service_id AND DOJ = @DOJ

测试DOJ必须在ON子句中,这样测试就不会过滤掉不匹配时产生的空行。

于 2013-09-29T06:23:55.373 回答
0
select case when total_seats is null then 60 else total_seats end as total_seats
from service_table
left outer join reservation_table
    on service_table.service_id = reservation_table.bus_service_id
where DOJ = @DOJ

您需要使用左外连接,否则您将消除 service_table 中在 reservation_table 中没有 bus_service_id 的值。CASE 语句有点像 switch 语句,因此如果没有从 reservation_table 匹配的值,我们将返回 60。如果您发现更清楚,您还可以在连接条件中包含 DOJ = @DOJ。当然,我也省略了参数声明;它会根据它是函数的参数还是脚本的一部分而有所不同。

于 2013-09-29T06:04:55.620 回答