0

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 条件を使用するにはどうすればよいでしょうか。

4

3 に答える 3

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
于 2013-01-18T14:44:30.707 に答える
0

ロジックを節に入れることは間違いありませんがon、私は 2 つの別々の結合を行い、ロジックを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節に論理がある方が理解しやすいと思いますが、他の人が反対する可能性があることは認識しています。

于 2013-01-18T15:40:19.543 に答える
0

使用するcase

http://www.tizag.com/sqlTutorial/sqlcase.php

使用方法の例を示します

    「駅」=ケース
    WHEN (strt_stn_id > end_stn_id) THEN (end_stn_id)
    ELSE (strt_stn_id)
        終わり
于 2013-01-18T14:44:19.063 に答える