碼上快樂
1秒登錄
首頁
榜單
標簽
關於
搜索
相關內容
簡體
繁體
mybatis中union可以用if判斷連接,但是
中第一個select語句不能被if判斷,因此可以從dual表中查詢null來湊齊。union如果使用order by排序,那么只能放在最后一個查詢語句的位置,並且不能帶表名。 本文轉載自 查看原文 2018-03-23 09:57 1159 mybatis <!-- 一址多證納稅人分析表 --> <select id="yzdznsrlistPage" parameterType="page" resultType="pd"> select * from ( select null NSRSBH,null NSRMC,null ZGSWJ_DM,null ZGSWSKFJ_DM,null SSGLY_DM,null FDDBRXM,null SCJYDZ,null ZCDZ from dual <if test="pd.flag==1 or pd.flag==2 or pd.flag==3"> union all <!-- 此處應該使用union all 而不是union,使用union的話會導致查出的數據量不對 --> </if> <if test="pd.flag==1 or pd.flag==3"> select NSRSBH,NSRMC,ZGSWJ_DM,ZGSWSKFJ_DM,SSGLY_DM,FDDBRXM,SCJYDZ,ZCDZ from hx_dj.dj_nsrxx nsr where nsr.zcdz in (select n.zcdz from (select ns.zcdz,count(1) cnt from hx_dj.dj_nsrxx ns group by ns.zcdz having count(1) > 1) n) <if test="pd.swjg != null and pd.swjg != ''"> AND <foreach collection="pd.swjgs" item="item" open="(" separator="OR" close=")"> nsr.ZGSWSKFJ_DM LIKE '${item}%' </foreach> </if> </if> <if test="pd.flag==3"> union </if> <if test="pd.flag==2 or pd.flag==3"> select NSRSBH,NSRMC,ZGSWJ_DM,ZGSWSKFJ_DM,SSGLY_DM,FDDBRXM,SCJYDZ,ZCDZ from hx_dj.dj_nsrxx nsrscjy where nsrscjy.scjydz in (select nscjy.scjydz from (select nsscjy.scjydz,count(1) cnt from hx_dj.dj_nsrxx nsscjy group by nsscjy.scjydz having count(1) > 1) nscjy) <if test="pd.swjg != null and pd.swjg != ''"> AND <foreach collection="pd.swjgs" item="item" open="(" separator="OR" close=")"> nsrscjy.ZGSWSKFJ_DM LIKE '${item}%' </foreach> </if> </if> ) where NSRSBH is not null </select> 針對本問題有了新的解決方式,上面的解決方法太過復雜。 其實要判斷兩個select查詢語句是否合並,沒必要判斷union是否需要存在。讓union一直保持存在就好,比如傳1進來,可以讓上面的select查出值,下面的select查出的是null;傳2進來,可以讓下面的select查出值,上面的select查出的是null。這樣就沒必要傳 3進來了。多增加一列z,字段的值就是1、2,這樣來決定兩個查詢語句是否查出來的值是null。 上面的語句可以改為 select NSRSBH,NSRMC,ZGSWJ_DM,ZGSWSKFJ_DM,SSGLY_DM,FDDBRXM,SCJYDZ,ZCDZ,1 zfrom hx_dj.dj_nsrxx nsrwhere nsr.zcdz in (select n.zcdz from (select ns.zcdz,count(1) cnt from hx_dj.dj_nsrxx ns group by ns.zcdzhaving count(1) > 1) n) <if test="pd.swjg != null and pd.swjg != ''">AND <foreach collection="pd.swjgs" item="item" open="(" separator="OR" close=")">nsr.ZGSWSKFJ_DM LIKE '${item}%' </foreach></if> and z = '1'unionselect NSRSBH,NSRMC,ZGSWJ_DM,ZGSWSKFJ_DM,SSGLY_DM,FDDBRXM,SCJYDZ,ZCDZ,2 zfrom hx_dj.dj_nsrxx nsrscjywhere nsrscjy.scjydz in (select nscjy.scjydz from (select nsscjy.scjydz,count(1) cnt from hx_dj.dj_nsrxx nsscjy group by nsscjy.scjydzhaving count(1) > 1) nscjy)<if test="pd.swjg != null and pd.swjg != ''">AND <foreach collection="pd.swjgs" item="item" open="(" separator="OR" close=")">nsrscjy.ZGSWSKFJ_DM LIKE '${item}%' </foreach></if> and z = '2' × 免責聲明! 本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。 猜您在找 如何使用SQL SELECT語句從單個表中查詢數據 Mybatis中sql語句中的in查詢,判斷null和size為0的情況 SELECT INTO - 從一個查詢的結果中創建一個新表 淺析如何在select中使用條件判斷語句實現根據不同類型取不同表中的字段的值賦值給同一個字段:SQL之case when then用法 MySQL多個相同結構的表查詢並把結果合並放在一起的語句(union all) MySQL多個相同結構的表查詢並把結果合並放在一起的語句(union all) sql語句-如何在SQL以一個表中的數據為條件據查詢另一個表中的數據 查詢排序:order by case when理解(根據一個字段的多個值進行排序)、在order By子句中使用case語句的理解、ORDER BY 2 DESC 中 2 的理解 查詢sqlserver中字段不為null且不為空語句 mysql中union 查詢 粵ICP備18138465號 © 2018-2025 CODEPRJ.COM