2013-09-29 25 views
0

第一個表是service表,第二個表是reservation表。通過mysql中的select語句進行迭代

我的要求是:首先我需要從服務表中選擇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

請幫忙嗎? – Srinivas

回答

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 

你需要使用一個左外連接,否則你將消除其存在reservation_table沒有bus_service_id在service_table值。 CASE語句有點像switch語句,所以如果沒有來自reservation_table的匹配值,我們將返回60.如果發現更加清晰,您還可以在連接條件中包含DOJ = @DOJ。當然,我也省略了參數聲明;它會根據它是一個函數的參數還是腳本的一部分而有所不同。

+0

您需要將'DOJ = @ DOJ'放入'ON'子句中,否則將刪除空行。另外,我建議使用'COALESCE'或'IFNULL'而不是詳細的'CASE'語句。 – Barmar

+0

嗨@prekolna感謝您的答案。我沒有得到答案,因爲如果特定日期的bus_service_id值不存在,那麼我也需要將total_seats值作爲60。 – Srinivas

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子句中,這樣的測試不篩選出的結果,如果沒有匹配的空行。