通过mysql中的select语句进行迭代

时间:2013-09-29 05:59:29

标签: mysql sql select

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

我的要求是:首先我需要选择service_id,来自服务表的金额,如果所选的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。

2 个答案:

答案 0 :(得分: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子句中,以便测试不会过滤掉在没有匹配时产生的空行。

答案 1 :(得分: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。当然,我也省略了参数声明;它将根据它是函数的参数还是脚本的一部分而有所不同。