第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

SQL NOT IN NULL 問(wèn)題

標(biāo)簽:
Oracle

最近工作的时候遇到一个查询问题,SQL如下:
select indicator.*FROM t_ind_indicator_info indicator WHERE indicator.STATUS = 1 AND indicator.FLAG = 1 AND indicator.MGRIND_TYPE = 1 AND indicator.id not in (select distinct t.indicator_id from t_ind_riskwarning_indicator t)

突然查询的时候为空了,然后查看数据库发现 indicator_id 有个为NULL 。

原来是在not in 的时候 NULL 会影响结果集为空的。

select from tableA where tableA.in not in (A,NULL) 相当于select from tableA where tableA.id <> A and tableA.id <> NULL 。 而在ANSI SQL中 <>null 返回的结果永远是0,即没有结果集,且不会提示语法错误。当一个有结果集的数据and一个无结果集的数据,最终结果为无结果集。

select from tableA where tableA.in in (A,NULL) 相当于select from tableA where tableA.id = A or tableA.id = NULL 。 而在ANSI SQL中 =null 返回的结果永远是0,即没有结果集,且不会提示语法错误。当一个有结果集的数据or一个无结果集的数据,最终结果为有结果集的数据。

因此not in 使用的时候一定要避免NULL的出现,最简单的可以使用

select * from A where A.id not in (select id from B where b.id IS NOT NULL)

not in 类似其它方法 join 和not exists。

not exists 方式

select indicator.*
   FROM t_ind_indicator_info indicator
WHERE indicator.STATUS = 1
   AND indicator.FLAG = 1
   AND indicator.MGRIND_TYPE = 1
   and   not exists
       (select 1 from t_ind_riskwarning_indicator t where t.indicator_id = indicator.id)

join 方式

 FROM t_ind_indicator_info indicator  left  join t_ind_achievement_indicator t on t.indicator_id = indicator.id
  where t.id is  null 
   and indicator.STATUS = 1
   AND indicator.FLAG = 1
   AND indicator.MGRIND_TYPE = 1  

--注:本人水平有限,如有问题或错误欢迎指正。--

點(diǎn)擊查看更多內(nèi)容
1人點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶(hù)
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專(zhuān)欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消