我有一个名为Train
的表,其中包含以下示例数据:
train_id strt_stn_id end_stn_id direction
---------------------------------------------
1 1 10 D
2 1 21 D
3 10 1 U
4 1 5 D
5 1 15 D
以及包含此数据的Station
表:
stn_id stn_name
---------------------
1 Churchgate
2 Marine Lines
3 Charni Road
4 Grant Road
5 Mumbai Central
6 Mahalaxmi
7 Lower Parel
8 Elphinstone Road
9 Dadar
10 Matunga Road
11 Mahim
12 Bandra
13 Khar Road
14 Santacruz
15 Vile Parle
我想根据条件选择电台名称。如果strt_stn_id > end_stn_id
,我希望电台名称end_stn_id
其他电台名称为strt_stn_id
。
那么如何在SQL查询中使用if条件?
答案 0 :(得分:4)
试试这个:
SELECT T.*, S.stn_name
FROM Train T
INNER JOIN Station S
ON CASE WHEN T.strt_stn_id > T.end_stn_id
THEN T.end_stn_id ELSE T.strt_stn_id END = S.stn_id
答案 1 :(得分:0)
使用case
http://www.tizag.com/sqlTutorial/sqlcase.php
给出了如何使用
的示例'station' = CASE WHEN (strt_stn_id > end_stn_id) THEN (end_stn_id) ELSE (strt_stn_id) END
答案 2 :(得分:0)
虽然你绝对可以把逻辑放在on
子句中,但我更喜欢做两个单独的连接并将逻辑放在select
子句中:
SELECT T.*,
(case when t.strt_stn_id > t.end_stn_id then starts.stn_name
else ends.stn_name
end) as TheName
FROM Train T INNER JOIN
Station Starts
ON T.strt_stn_id = Starts.stn_id inner join
Station ends
on T.end_stn_id = ends.stn_id
通常,case
子句中的on
语句或函数都会阻止引擎使用索引。如果表具有合理的索引(例如在其主键上),则此版本将更好地工作。顺便说一句,我也认为在select
条款中使用逻辑更容易理解,但我认识到其他人可能不同意。