5
我正在研究棒球相關網站。我有一個擊球陣容的表兩個棒球隊:在使用MySQL的選擇查詢中使用CASE,WHEN,THEN,END
+----+----------+--------------+--------+
| id | playerId | battingOrder | active |
+----+----------+--------------+--------+
擊球順序爲1和20。這對應於下面的邏輯之間的整數:
- 擊球順序1-9 —客場球隊陣容
- 擊球順序10 —客場球隊投手
- 擊球順序11-19 —首頁球隊陣容
- 擊球順序20 —主隊投手
活動區域是一個tinyint 0或1,代表土丘上的投手和盤子上的擊球手。
已知的事實:總是會有一個球隊的主動投手和對方球隊的一個主動投手。
我需要寫一個返回一行對應於battingOrder的下一個連擊主隊球員的查詢。
實施例(即該之後發生活性麪糊的battingOrder的一個):
- 如果battingOrder 13球員是活動的,該查詢應在擊球順序返回播放器14
- 如果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;
看來工作,但什麼邊緣情況和/或陷阱我已走進了?這是否有效?我特別感興趣的是我的問題不使用嵌套查詢的解決方案。
這看起來不正確。你爲什麼在看id列?它應該是battingOrder列。 – Stephen 2011-04-13 22:50:30
@Stephen - 是的。這是一個錯字。固定。 – Thomas 2011-04-13 22:55:28
好吧,我用你的查詢逐字逐句,沒有結果。我有一名玩家在擊球順序排名第19位處於激活狀態,但是您的查詢都沒有返回任何結果。 – Stephen 2011-04-13 22:57:56