我做了以下情況時聲明我的SQL:情況下,當MySQL與多個條件
SELECT
*,
CASE
WHEN lead_time < 14 THEN 0
WHEN (14 <= lead_time < 21 AND days_passed = 8) THEN 1
WHEN
(21 <= lead_time < 28
AND days_passed = 15)
THEN
1
WHEN
(28 <= lead_time < 42
AND days_passed = 22)
THEN
1
WHEN
(42 <= lead_time < 56
AND days_passed = 36)
THEN
1
WHEN
(56 <= lead_time < 84
AND days_passed = 29)
THEN
1
WHEN
(56 <= lead_time < 84
AND days_passed = 50)
THEN
1
WHEN (lead_time > 84 AND days_passed = 36) THEN 1
WHEN (lead_time > 84 AND days_passed = 57) THEN 1
ELSE 0
END AS send_email
我沒有得到任何錯誤。然而,當我檢查結果我得到:
# lead_time, days_passed, send_email
99, 15, 1
99, 22, 1
99, 15, 1
99, 8, 1
99, 8, 1
99, 8, 1
99, 8, 1
85, 29, 1
57, 50, 1
18, 36, 1
99, 22, 1
99, 22, 1
99, 22, 1
99, 22, 1
99, 22, 1
15, 15, 1
15, 15, 1
99, 8, 1
99, 8, 1
99, 8, 1
99, 8, 1
它看來,如果「和」在查詢表現爲一個「或」。任何想法爲什麼? 謝謝,
你介意告訴我們這個非常複雜的'CASE'語句背後的邏輯是什麼? –
我不是mysql的專家,但我從來沒有見過檢查值的簡寫是在兩個數字之間。我會使用Between運算符。出於興趣,你有沒有參考文檔的速記符號? –
+1用於檢查邏輯。聲明看起來非常脆弱,特定於目前存在的數據並且通常沒有太多用處,如果它是一次性的,那麼它是可以的,但是明天會發生什麼,據推測days_passed可能是16而不是15等。 –