mysql union 的用法

合并查询结果



将两次或者两次以上的结果合并在一起



要求: 两次查询的列数一致


推荐,查询每一列,相对应的列类型是一样的


多次sql语句 取出 的列名可以不一致,此时以取第一个sql 的列名为准。




如果不同的语句中取出的行  有每个列的值都相同,那么相同的行将被合并成一行(去重复)


如果不想去重复union加上 all





创建表格


create table ta


(id char(1) default null,


num int not null default 0


) engine=InnoDB  charset=utf8;



insert into ta


(id,num)


values


('a',10),


('b',20),


('c',30),


('d',40);

create table tb


(id char(1) default null,


num int not null default 0


) engine=InnoDB  charset=utf8;





insert into tb


(id,num)


values


('a',50),


('b',60),


('c',70),


('d',80);

 合并 两张表格

2  合并两张表单 把相同id下的数值sum求和 

发现问题

 使用聚合 函数时  不许有空格

Sum(num)

Sum (num)

将会把  sum  识别为 表 报该数据库下不存在该表单错误


Error 1630(42000)





注意:如果子句里 有 order by | limit 需要 union 两边加小括号


例如


(select  good_id,cat_id,goods_name,shop_price from goods _id =where cat_id = 4 order by



shop_price desc )union (select  good_id,cat_id,goods_name,shop_price from goods _id =where



cat_id = 5 order by shop_price desc);







但是 容易有误


解决方案


1  order by 尽量放在最后使用  即岁最终合并后的结果 进行排序


(select  good_id,cat_id,goods_name,shop_price from goods _id =where cat_id = 4 )union



(select  good_id,cat_id,goods_name,shop_price from goods _id =where cat_id = 5  order by



shop_price desc;

 每个子语句 加上limit

上一篇:go etcd使用


下一篇:golang中的内存对齐