union all与union关键字

最近我在做电子商务项目里面遇到了一个需求,就是把秒杀与团购的商品一起查询出来。但是由于两个表里面的字段不一样所以秒杀商品与团购商品分来存储的,合并怎么合并了??
最后我想到oracle里面的关键字union,这个关键字是用来查询并集的,所以我就用了union来把两个表里面数据查询出来,sql如下:


"select A.*\n" +
" from (\n" +
" select A.SECKILL_ID ID,\n" +
" A.COMMODITY_ID,\n" +
" A.COMMODITY_NAME,\n" +
" A.SELL_PRICE,\n" +
" A.BUY_USER_CNT,\n" +
" A.PRICE,\n" +
" A.isTimeEnd,\n" +
" A.COUNT,\n" +
" A.BRAND_ID,\n" +
" 1 TYPE,\n" +
" discount,\n" +
" A.BEGIN_TIME,\n" +
" A.CONTENT CONTENT,\n" +
" TO_CHAR(discount * 10, '0.99') show_discount\n" +
" from (select s.*,\n" +
" sc.BRAND_ID,\n" +
" sc.COMMODITY_NAME,\n" +
" case\n" +
" when begin_time < sysdate and end_time > sysdate then\n" +
" 0\n" +
" else\n" +
" 1\n" +
" end isTimeEnd,\n" +
" sc.sell_price,\n" +
" nvl(cnt, 0) + nvl(back_count, 0) BUY_USER_CNT,\n" +
" s.price / sc.sell_price discount\n" +
" from seckill s\n" +
" join (select CSC.SORT_ID,\n" +
" C.COMMODITY_ID,\n" +
" C.COMMODITY_NAME,\n" +
" SC.SELL_PRICE,\n" +
" SC.SHOP_COMMODITY_ID,\n" +
" C.BRAND_ID\n" +
" from COMMODITY C\n" +
" join SHOP_COMMODITY SC on C.COMMODITY_ID =\n" +
" SC.COMMODITY_ID\n" +
" join COMMODITY_SORT_CONTACT CSC on CSC.COMMODITY_ID =\n" +
" C.COMMODITY_ID\n" +
" join (SELECT *\n" +
" FROM sort\n" +
" START WITH SORT_ID = 1\n" +
" connect by P_ID = prior SORT_ID\n" +
" and STATE = 1) s on S.SORT_ID =\n" +
" CSC.SORT_ID\n" +
" join COMMODITY_BRAND CB on C.BRAND_ID = CB.BRAND_ID\n" +
" where S.STATE = 1\n" +
" and SC.STATE = 1\n" +
" and sc.SELL_PRICE > 0\n" +
" and C.STATE = 1\n" +
" and C.IS_SHOW = 1\n" +
" and CB.STATE = 1\n" +
" and SC.SALE_ENABLE_COUNT > 0\n" +
" and SC.SELL_PRICE > 0\n" +
" and (c.IS_SCORE is null or c.IS_SCORE != 1)) sc on sc.commodity_id =\n" +
" s.commodity_id\n" +
" left join (select count(seckill_id) cnt, seckill_id\n" +
" from seckill_order\n" +
" group by seckill_id) o on o.seckill_id =\n" +
" s.seckill_id\n" +
" where s.state = 1) A\n" +
" union \n" +
" select A.GROUP_BUYING_ID ID,\n" +
" A.COMMODITY_ID,\n" +
" A.COMMODITY_NAME,\n" +
" A.SELL_PRICE,\n" +
" A.BUY_USER_CNT,\n" +
" A.PRICE,\n" +
" A.isTimeEnd,\n" +
" A.BRAND_ID,\n" +
" A.COUNT,\n" +
" 2 TYPE,\n" +
" discount,\n" +
" A.BEGIN_TIME,\n" +
" A.GROUP_BUYING_TEXT CONTENT,\n" +
" TO_CHAR(discount * 10, '0.99') show_discount\n" +
" from (select group_buying_text CONTENT,\n" +
" group_buying_price price,\n" +
" s.*,\n" +
" sc.BRAND_ID,\n" +
" sc.COMMODITY_NAME,\n" +
" case\n" +
" when begin_time < sysdate and end_time > sysdate then\n" +
" 0\n" +
" else\n" +
" 1\n" +
" end isTimeEnd,\n" +
" sc.sell_price,\n" +
" nvl(cnt, 0) + nvl(back_count, 0) BUY_USER_CNT,\n" +
" s.group_buying_price / sc.sell_price discount\n" +
" from group_buying s\n" +
" join (select CSC.SORT_ID,\n" +
" C.COMMODITY_ID,\n" +
" C.COMMODITY_NAME,\n" +
" SC.SELL_PRICE,\n" +
" SC.SHOP_COMMODITY_ID,\n" +
" C.BRAND_ID\n" +
" from COMMODITY C\n" +
" join SHOP_COMMODITY SC on C.COMMODITY_ID =\n" +
" SC.COMMODITY_ID\n" +
" join COMMODITY_SORT_CONTACT CSC on CSC.COMMODITY_ID =\n" +
" C.COMMODITY_ID\n" +
" join (SELECT *\n" +
" FROM sort\n" +
" START WITH SORT_ID = 1\n" +
" connect by P_ID = prior SORT_ID\n" +
" and STATE = 1) s on S.SORT_ID =\n" +
" CSC.SORT_ID\n" +
" join COMMODITY_BRAND CB on C.BRAND_ID = CB.BRAND_ID\n" +
" where S.STATE = 1\n" +
" and SC.STATE = 1\n" +
" and sc.SELL_PRICE > 0\n" +
" and C.STATE = 1\n" +
" and C.IS_SHOW = 1\n" +
" and CB.STATE = 1\n" +
" and SC.SALE_ENABLE_COUNT > 0\n" +
" and SC.SELL_PRICE > 0\n" +
" and (c.IS_SCORE is null or c.IS_SCORE != 1)) sc on sc.commodity_id =\n" +
" s.commodity_id\n" +
" left join (select count(group_buying_id) cnt,\n" +
" group_buying_id\n" +
" from (select MEMBER_ID, group_buying_id\n" +
" from GROUP_BUYING_MEMBER\n" +
" where state != 2\n" +
" group by group_buying_id, member_id)\n" +
" group by group_buying_id) o on o.group_buying_id =\n" +
" s.group_buying_id\n" +
" where s.state = 1) A) A\n" +
" order by BEGIN_TIME desc, type asc, ID DESC\n" +
"\n" +
"";
,但是我在执行之后老是报orc-000932异常,数据类型不一致。于是我就想是不是我要查询的字段是不是有类型问题,我一个个的对比发现没有问题。然后我在网上找了一下问题,原来是union关键字会会对结果集里面的商品数据进行帅选,把union换成union all就可以解决这个问题了.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值