簡體   English   中英

在使用MySQL的select查詢中使用CASE,WHEN,THEN,END

[英]Using CASE, WHEN, THEN, END in a select query with MySQL

我正在打一個棒球相關的網站。 我有一個桌子,有兩個棒球隊的擊球陣容:

+----+----------+--------------+--------+
| id | playerId | battingOrder | active |
+----+----------+--------------+--------+

擊球順序是1到20之間的整數。這對應於以下邏輯:

  1. 擊球順序1-9 - 客隊陣容
  2. 擊球順序10 - 客隊投手
  3. 擊球順序11-19 - 主隊陣容
  4. 擊球令20 - 主隊投手

活動字段是一個tinyint 0或1,表示土墩上的投手和盤子上的擊球手。

已知事實 :一支球隊總會有一名主動投手,另一支球隊將有一名主動投手。

我需要編寫一個查詢,為主隊球員返回一個對應於battingOrder中下一個擊球手的行。 (在活動擊球手的擊球發生的那個)

例:

  1. 如果battingOrder 13中的玩家處於活動狀態,則查詢應該以擊球順序14返回玩家。
  2. 如果battingOrder 19中的玩家處於活動狀態,則查詢應該以擊球順序11返回玩家(陣容循環回到團隊的第一個玩家)。

我之前從未使用過CASE查詢,但我想出了以下內容:

SELECT *
  FROM lineups
 WHERE battingOrder = 
       CASE (
           SELECT battingOrder
             FROM lineups
            WHERE battingOrder > 10 AND active = 1
            LIMIT 1
       )
       WHEN 11 THEN 12
       WHEN 12 THEN 13
       WHEN 13 THEN 14
       WHEN 14 THEN 15
       WHEN 15 THEN 16
       WHEN 16 THEN 17
       WHEN 17 THEN 18
       WHEN 18 THEN 19
       WHEN 19 THEN 11
       END
 LIMIT 1;

它似乎有用,但我走進了什么邊緣案例和/或陷阱? 這有效嗎? 我特別感興趣的是我的問題解決方案沒有使用嵌套查詢。

Select LNext.player As NextPlayer
From lineups As L
    Left Join lineups As LNext
        On LNext.BattingOrder Between 11 And 20
            And LNext.BattingOrder  = Case
                                        When L.BattingOrder  = 19 Then 11
                                        Else L.BattingOrder  + 1
                                        End
Where L.battingOrder Between 11 And 20
    And L.active = 1

事實上,你可以讓它像家一樣處理,就像這樣:

Select LNext.player As NextPlayer
From lineups As L
    Left Join lineups As LNext
        On LNext.BattingOrder  = Case
                                    When L.BattingOrder  = 19 Then 11
                                    When L.BattingOrder  = 9 Then 1
                                    Else L.BattingOrder  + 1
                                    End
Where L.active = 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM