久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

怎么在sql語句中替換Not In方法

140次閱讀
沒有評論

共計 1593 個字符,預計需要花費 4 分鐘才能閱讀完成。

本篇內容主要講解“怎么在 sql 語句中替換 Not In 方法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓丸趣 TV 小編來帶大家學習“怎么在 sql 語句中替換 Not In 方法”吧!

目的:

替換 NOT IN 方法。

說明:

在單條 SQL 語句中,不使用儲存過程,不使用臨時表。使用存儲過程和臨時表不再本文的討論范圍中。

實現:

例:

表 aa:結構

id      value  ……

1    a

2  b

3  c

4  d

5  e

6  f

———————————————————————————————

 

表 bb: 結構

id   ……

2

4

6

 

現在我要取表 aa 里的所有字段,條件是 aa 的 id 值不在 bb 的 id 值當中(not in)。也就是應該返回所有 id 為奇數的字段

 

使用 NOT IN 的 SQL:

select * from aa where id not in(select id from bb)

就一條語句,簡單明了,可惜效率不高,而且公司規范要求盡量不用 NOT IN,害我費了好大事 crying……

 

改造后的 SQL:

select cc.id,cc.value from (select aa.*,bb.id as tempcolum from aa left join bb on aa.id=bb.id) as cc where cc.tempcolum is null

 

解釋一下。在開始時候我最早想用內聯表的方式,可是無論如何也每找到一個好的辦法,干脆就是實現不了。(大家有好辦法指教先。)

后來自己考慮了一下 NOT IN 的邏輯,A NOT IN B 就是說 A 是主體,B 起到的之不過是一個判斷作用,我們可以先把所有符合條件的 A 記錄全部查詢出來而不管他是否屬于 B,然后再從這里剔除值同時屬于 B 的部分。

Select aa.* from aa

但是僅僅這樣是不夠的,我們無法利用這個返回的結果集判斷是否屬于 B 并排除它,為此,我想到構造一個臨時的列,這個列的值應該是在 A 的結果集范圍內,所有在 B 中的值。而這個結果集的主體應該是所有滿足先決條件的 A,然后加上滿足條件的 B,而不滿足條件的 B 值則不再考慮范圍內,所以用了 left join。

這一段是關鍵,不知道我闡述清楚了沒有,沒明白的繼續看

于是就出來這一句。

select aa.*,bb.id as tempcolum from aa left join bb on aa.id=bb.id

沒看明白上面的看結果集就明白了

id  value  tempcolum

———————————————

1  a    NULL

2  b    2

3  c    NULL

4  d    4

5  e    NULL

6  f    6

 

看到這個結果集我想大家都明白我的意思了吧。對了,我們就是要對這個結果集進行二次操作。

相信大家都看到了,生成的這個結果集包含了所有符合條件的表 aa 字段和 bb 的 id,如果 aa 中的值在 bb 中,則 tempcolum 的值就不會為 null,如果不在就是 null,這樣我們只需要從這個結果集里查詢所有 tempcolum 值為 null 的就可以滿足我們的要求了

所以最終的 sql 出來了

select cc.id,cc.value from (select aa.*,bb.id as tempcolum from aa left join bb on aa.id=bb.id) as cc where cc.tempcolum is null

我們只需要 id 和 value 兩個字段,其他的就不要了。

結果

id  value

————————-

1  a 

3  c 

5  e 

 

ok,實現了,希望對大家有幫助。

到此,相信大家對“怎么在 sql 語句中替換 Not In 方法”有了更深的了解,不妨來實際操作一番吧!這里是丸趣 TV 網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-01發表,共計1593字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 宜州市| 武汉市| 繁昌县| 澄迈县| 朝阳区| 屯留县| 阳高县| 丹凤县| 纳雍县| 余干县| 辽宁省| 荣成市| 共和县| 攀枝花市| 新安县| 阜新| 绥芬河市| 乌什县| 浦江县| 邛崃市| 大同市| 金湖县| 金阳县| 云南省| 澳门| 大埔区| 云南省| 精河县| 余姚市| 青田县| 安平县| 武乡县| 花莲县| 资中县| 万年县| 历史| 中江县| 瓦房店市| 时尚| 夏津县| 东乌|