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