`
一笑_奈何
  • 浏览: 69225 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

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就可以解决这个问题了.
分享到:
评论

相关推荐

    SQL语句 UNION 和 UNION ALL 使用

    **UNION** 和 **UNION ALL** 是 SQL 语言中用于合并两个或多个 SELECT 语句结果集的关键字。这两种操作符都可以帮助我们创建一个单一的结果集,但是它们在处理重复数据的方式上有所不同。 ##### 1. UNION - **定义*...

    sqlserver Union和SQL Union All使用方法

    在SQL Server中,`UNION`和`UNION ALL`是两种用于合并多个SELECT语句结果集的关键字,它们在数据库查询中起着至关重要的作用。理解这两种操作符的使用方法可以帮助你更有效地构建和优化SQL查询。 首先,`UNION`操作...

    MySQL中UNION与UNION ALL的基本使用方法

    在数据库中,UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。 MySQL中的UNION UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算...

    浅析mysql union和union all

    在MySQL数据库中,`UNION` 和 `UNION ALL` 是两种用于合并多个查询结果集的关键字,它们在处理数据时具有不同的特性和性能影响。 首先,`UNION` 关键字用于合并两个或更多 `SELECT` 查询的结果,并且会自动去除重复...

    mysql执行计划id为空(UNION关键字)详解

    如果需要包含重复的行,可以使用`UNION ALL`替代,这样不会进行去重操作。 `UNION`操作符的语法结构如下: ```sql SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM table_name2 ``` 在...

    Sql中的UNION

    #### 三、UNION与UNION ALL的区别 - **UNION**:默认去除重复行。 - **UNION ALL**:保留所有行,包括重复行。 #### 四、UNION的实际应用示例 假设我们有两个表格:`Store_Information`和`Geography`,以及一个...

    MySQL Union合并查询数据及表别名、字段别名用法分析

    union关键字 SELECT s_id, f_name, f_price FROM fruits WHERE f_price &lt; 9.0 UNION ALL SELECT s_id, f_name, f_price FROM fruits WHERE s_id IN(101,103); 为表取别名 SELECT * from orders AS o WHERE o.o...

    2022年SQL合并查询Union并集运算.pptx

    如果使用 `UNION ALL` 关键字,将保留重复记录。 三、SQL Union 并集运算使用场景 SQL Union 并集运算常用于以下场景: 1. 合并多个查询结果:使用 Union 并集运算可以将多个查询结果结合在一起,生成一个完整的...

    05union_sql_

    - **基本UNION语法**:如何构建简单的UNION查询,包括SELECT语句的结构和UNION关键字的位置。 - **使用UNION ALL**:什么时候使用UNION ALL,以及它与UNION的区别。 - **处理不同列数或类型**:如果两个SELECT语句...

    Explain关键字详解.pdf

    如果查询中包含子查询或者UNION语句,那么每个SELECT关键字都会有一个唯一的id值。 例如,当查询中包含子查询时: ```sql mysql&gt; explain select * from (select * from t1 where id=1) as subquery; ``` 输出...

    Mysql 关键字执行顺序

    9. UNION/UNION ALL:用于合并多个SELECT语句的结果,UNION会去除重复行,UNION ALL则保留所有行。 10. ORDER BY:对结果集进行排序。 11. LIMIT:最后,LIMIT用于获取指定数量的记录,常用于分页查询。 关于执行...

    详解MySQL中UNION的用法

    `UNION` 关键字的主要目的是去除重复的行,使得最终的结果集中不包含重复记录。然而,如果你需要保留所有数据,包括重复的行,你可以使用 `UNION ALL`。 ### UNION 的基本语法 `UNION` 基本语法如下: ```sql ...

    sql 函数——汉字首字母

    SELECT 'A' AS PY, N'' AS word UNION ALL SELECT 'B', N'' UNION ALL SELECT 'C', N'e' UNION ALL SELECT 'D', N'z' UNION ALL SELECT 'E', N'' UNION ALL SELECT 'F', N'v' UNION ALL SELECT 'G', N'B' ...

    06-3-数据库查询-合并查询结果并去重

    UNION 与 UNION ALL 的概念 - **UNION**:用于合并两个或多个`SELECT`语句的结果集。使用`UNION`时,结果集中只会包含唯一的行,即会自动去除重复的数据。 - **UNION ALL**:同样用于合并两个或多个`SELECT`语句的...

    SQL语句操作关键字全集

    - `UNION ALL`: 合并两个查询结果,保留所有行,包括重复行。 - `EXCEPT`: 返回只在第一个查询中出现的行,去除重复行。 - `EXCEPT ALL`: 返回只在第一个查询中出现的所有行,包括重复行。 - `INTERSECT`: 返回...

    oracle 面试题目及解答

    - `UNION ALL`用于合并多条`SELECT`语句的结果集,并包含所有记录(包括重复记录)。 ### 2. 数据聚合查询 **题目描述:** 查询表`A`中的所有列,同时从表`B`中获取`content`对应的`ismember`的总和,并按`content...

    sql 高级查询技术

    与 `UNION` 类似,但是 `UNION ALL` 不会去除重复的行。 ```sql SELECT column1, column2 FROM table1 UNION ALL SELECT column1, column2 FROM table2; ``` ### 实例分析 以下是一些具体的例子: 1. **查询成绩...

Global site tag (gtag.js) - Google Analytics