合并查询结果
将两次或者两次以上的结果合并在一起
要求: 两次查询的列数一致
推荐,查询每一列,相对应的列类型是一样的
多次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);
1 合并 两张表格
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;
2 每个子语句 加上limit