在網(wǎng)上查詢ifnull有沒有嵌套使用的方式,但是貌似沒有人提到過這個(gè)用法:大都是簡(jiǎn)單的判斷一個(gè)字段是否為空,然后用另外一個(gè)值代替的方式使用;
即是:
select ifnull(a,b) from A ;
每一個(gè)商店會(huì)有兩種打折方式vip_discount與simple_discount,從數(shù)據(jù)庫查出來以discount字段命名;且以vip_discount為主。
意思是如果vip_discount不為空,就返回它的值,若它的值為空就要進(jìn)一步判斷simple_discount字段是否為空,如果不為空就返回simple_discount的值,否則就返回一個(gè)空字符串。
這里我就想到了可不可以使用ifnull嵌套來判斷達(dá)到我的目的。
在網(wǎng)上查了許久也沒有發(fā)現(xiàn)有類似的博客,就尋思自己試試不就行啦:
select ifnull(vip_discount,ifnull(simple_discount,"")) as discount from A;
這樣就解決問題了,此SQL語句也可以在后面添加條件語句來補(bǔ)充其他條件查詢。
廢話不多說,直接看SQL:
UPDATE lb_user u SET u.user_level = ( SELECT IFNULL(levelid, u.user_level) FROM lb_user_level WHERE `status` = 1 AND levelid > u.user_level AND (upgrade_score u.empirical OR upgrade_total_money u.total_consumption_money) ORDER BY levelid DESC LIMIT 1 );
這個(gè)SQL乍一看沒什么問題,執(zhí)行的時(shí)候也成功了,可再次執(zhí)行就修改出錯(cuò),原因是根據(jù)當(dāng)前的條件無法檢索出數(shù)據(jù),返回?cái)?shù)據(jù)為空,注意是數(shù)據(jù)為空,沒有這條數(shù)據(jù),而不是有這條數(shù)據(jù)存在該字段為空,經(jīng)過排查,修改SQL如下:
UPDATE lb_user u SET u.user_level = IFNULL(( SELECT levelid FROM lb_user_level WHERE `status` = 1 AND levelid > u.user_level AND (upgrade_score u.empirical OR upgrade_total_money u.total_consumption_money) ORDER BY levelid DESC LIMIT 1 ), u.user_level);
經(jīng)過修改后執(zhí)行就成功了,并且不存在IFNULL失效的情況;
MYSQL中IFNULL僅可以判斷該數(shù)據(jù)存在的情況下為NULL,而不能判斷該條數(shù)據(jù)沒有查詢到而為NULL的情況。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
標(biāo)簽:定西 無錫 三明 福州 溫州 揚(yáng)州 山西 阿里
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL ifnull的嵌套使用說明》,本文關(guān)鍵詞 MySQL,ifnull,的,嵌套,使用說明,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。