日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL中使用CASE出错,如何在MySQL中正确使用CASE..WHEN

發布時間:2023/12/10 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL中使用CASE出错,如何在MySQL中正确使用CASE..WHEN 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如何在MySQL中正確使用CASE..WHEN

這里是一個演示查詢,注意它非常簡單,僅在base_price為0的位置獲取,并且仍然select條件3:

SELECT CASE course_enrollment_settings.base_price WHEN course_enrollment_settings.base_price = 0 THEN 1 WHEN course_enrollment_settings.base_price<101 THEN 2 WHEN course_enrollment_settings.base_price>100 AND course_enrollment_settings.base_price<201 THEN 3 ELSE 6 END AS 'calc_base_price', course_enrollment_settings.base_price FROM course_enrollment_settings WHERE course_enrollment_settings.base_price = 0

base_price是decimal(8,0)

當在我的數據庫上運行這個時,我得到:

3 0

3 0

3 0

3 0

3 0

在CASE之后立即刪除course_enrollment_settings.base_price :

SELECT CASE WHEN course_enrollment_settings.base_price = 0 THEN 1 ... END

CASE有兩種不同的forms,詳見手冊 。 在這里,你需要第二種forms,因為你正在使用search條件 。

CASE case_value WHEN when_value THEN statements [WHEN when_value THEN statements] ELSE statements END

要么:

CASE WHEN THEN statements [WHEN THEN statements] ELSE statements END

這里CASE是第二種情況下的expression式search_condition將進行評估,如果沒有search_condition是相等的,則執行else

SELECT CASE course_enrollment_settings.base_price WHEN course_enrollment_settings.base_price = 0 THEN 1

應該

SELECT CASE WHEN course_enrollment_settings.base_price = 0 THEN 1

CASE course_enrollment_settings.base_price在這里是錯誤的,它應該只是CASE

SELECT CASE WHEN course_enrollment_settings.base_price = 0 THEN 1 WHEN course_enrollment_settings.base_price<101 THEN 2 WHEN course_enrollment_settings.base_price>100 AND course_enrollment_settings.base_price<201 THEN 3 ELSE 6 END AS 'calc_base_price', course_enrollment_settings.base_price FROM course_enrollment_settings WHERE course_enrollment_settings.base_price = 0

一些解釋。 您的原始查詢將被執行為:

SELECT CASE 0 WHEN 0=0 THEN 1 -- condition evaluates to 1, then 0 (from CASE 0)compares to 1 - false WHEN 0<1 THEN 2 -- condition evaluates to 1,then 0 (from CASE 0)compares to 1 - false WHEN 0>100 and 0<201 THEN 3 -- evaluates to 0 ,then 0 (from CASE 0)compares to 0 - true ELSE 6, ...

這就是為什么你總是得到3

SELECT CASE WHEN course_enrollment_settings.base_price = 0 THEN 1 WHEN course_enrollment_settings.base_price>0 AND course_enrollment_settings.base_price<=100 THEN 2 WHEN course_enrollment_settings.base_price>100 AND course_enrollment_settings.base_price<201 THEN 3 ELSE 6 END AS 'calc_base_price', course_enrollment_settings.base_price FROM course_enrollment_settings WHERE course_enrollment_settings.base_price = 0

CASE有兩種變體 ,你不使用你認為的那種變體 。

你在做什么

CASE case_value WHEN when_value THEN statement_list [WHEN when_value THEN statement_list] ... [ELSE statement_list] END CASE

每個條件松散地等同于if (case_value == when_value) (偽代碼)。

然而,你已經把整個條件作為when_value ,導致類似于:

if (case_value == (case_value > 100))

現在, (case_value > 100)計算結果為FALSE ,并且是您這樣做的唯一條件。 所以,現在你有:

if (case_value == FALSE)

FALSE轉換為0并通過生成的完整expression式if (case_value == 0)您現在可以看到為什么第三個條件觸發。

你應該做什么

放下第一個course_enrollment_settings以便沒有case_value ,導致MySQL知道你打算使用CASE的第二個變體:

CASE WHEN search_condition THEN statement_list [WHEN search_condition THEN statement_list] ... [ELSE statement_list] END CASE

現在你可以提供你的完整條件為search_condition 。

另外,請閱讀文檔以了解您使用的function。

我認為其中的一部分就是說明您在CASE之后select的值,然后使用WHEN x = y語法,這是兩種使用CASE不同方法的組合。 它應該是

CASE X WHEN a THEN ... WHEN b THEN ...

要么

CASE WHEN x = a THEN ... WHEN x = b THEN ...

總結

以上是生活随笔為你收集整理的MySQL中使用CASE出错,如何在MySQL中正确使用CASE..WHEN的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。