mysql合并结果集
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql合并结果集相关的知识,希望对你有一定的参考价值。
(SELECT B.*,A.* FROM qb_fenlei_content A LEFT JOIN qb_fenlei_content_1 B ON A.id=B.id WHERE A.fid=11 AND A.city_id='1' AND A.yz='1' AND A.list>'1304562291' and A.`tuiguang`!='0' ORDER BY A.tuiguang DESC,A.list DESC) UNION ALL (SELECT B.... ORDER BY A; AND A;0'.* FROM qb_fenlei_content A LEFT JOIN qb_fenlei_content_1 B ON A.id WHERE A; AND A.id=B;1'1'.id WHERE A.tuiguang DESC,A.tuiguang DESC,A,但是合并后就报错 Lost connection to mysql server during query 请问我要怎么修改; ORDER BY A;1304562291'.list>'!='.fid=11 AND A; AND A.city_id='.list DESC) 这两个select语句挺复杂的;1304562291'.* FROM qb_fenlei_content A LEFT JOIN qb_fenlei_content_1 B ON A,A.yz='.yz='?高手求解, A.list<.city_id='.*.`tuiguang`.*.fid=11 AND A;1'' and A(SELECT B.list DESC) UNION ALL (SELECT B;1',单独查能出来; AND A.id=B 展开
参考技术A MySQL中的UNIONALL
而UNION
ALL只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。
从效率上说,UNION
ALL
要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用UNION
ALL,如下:
select
*
from
gc_dfys
union
all
select
*
from
ls_jg_dfys
使用Union,则所有返回的行都是唯一的,如同您已经对整个结果集合使用了DISTINCT
使用Union
all,则不会排重,返回所有的行
如果您想使用ORDER
BY或LIMIT子句来对全部UNION结果进行分类或限制,则应对单个地SELECT语句加圆括号,并把ORDER
BY或LIMIT放到最后一个的后面:
(SELECT
a
FROM
tbl_name
WHERE
a=10
AND
B=1)
UNION
(SELECT
a
FROM
tbl_name
WHERE
a=11
AND
B=2)
ORDER
BY
a
LIMIT
10;
麻烦一点也可以这么干:
select
userid
from
(
select
userid
from
testa
union
all
select
userid
from
testb)
as
t
order
by
userid
limit
0,1;
如果你还想group
by,而且还有条件,那么:
select
userid
from
(select
userid
from
testa
union
all
select
userid
from
testb)
t
group
by
userid
having
count(userid)
=
2;
注意:在union的括号后面必须有个别名,否则会报错
当然了,如果当union的几个表的数据量很大时,建议还是采用先导出文本,然后用脚本来执行
因为纯粹用sql,效率会比较低,而且它会写临时文件,如果你的磁盘空间不够大,就有可能会出错
Error
writing
file
'/tmp/MYLsivgK'
(Errcode:
28)
MySQL--多表查询
多表查询
使用多表关联查询的原因:查询的数据发布在多个表里
合并结果集:
合并结果集就是把两个select语句的查询结果合并到一起,结果集就是一个表格
两种方式:
UNION:去掉重复记录
如:select * from t1 union select * from t2;
UNION ALL:不去除重复记录
如:select * from t1 union all select * from t2;
要求:被合并的两个结果:列数必须相同
内连接
语法1:
select 列名 from 表一, 表二 where 表1.列名 条件运算符 表2.列名[and 条件] [order by 排序列];
语法2:
select 列名 from 表一 inner join 表二 on 表1.列名 条件运算符 表2.列名[where 条件][order by 排序列];
语法3:
select 列名 from 表1 natural join 表2;
步骤:
- 列出查询字段
- 观察查询字段在哪些表中
- 提取各表的公共字段
- 分析条件
外连接:
左外连接:
语法:
Select 列名 from 左表 left join 右表 on 左表.列名 条件运算符 右表.列名 [where 条件][order by 排序列];
含义:
左外连接是以左表为主表,去关联右表(从表),结果集中包括主表所有数据行,如果主表的某行在从表中没有匹配时,则从表的选择列为null值
select * from 表一 别名一 natural left outer join 表2 别名2;
右外连接:
语法:
select 列名 from 左表 right join 右表 on 左表.列名 条件运算符 右表.列名 [where 条件] [order by 排序列];
含义:
右外连接是以右表为主表,去关联左表(从表),结果集中包含主表所有数据行,如果主表的某行在从表中没有匹配行时,则从表的选择列为null值
select * from 表一 别名 natural right outer join 表二 别名二;
全外连接:
语法:
select 列名 from 左表 full [outer] join 右表 on 左表.列名 条件运算符 右表.列名 [where 条件] [order by 排序列]
含义:
完全连接左表和右表中所有行,当某行数据在另一个表中没有匹配时,则另一个表的选择列值为null
子查询
概念:
子查询就是嵌套查询,即select中包含select,如果一条语句中存在两个,或两个以上select,那么就是子查询语句了
子查询出现的位置:
where后,作为条件的一部分
From后,作为被查询的一条表
子查询结果集的形式:
单行单列:select * from 表一 别名一 where 列一[=、>、<、>=、<=、!=](select 列 from 表二 别名二 where 条件);
多行单列:select * from 表一 别名一where 列一[IN,All,ANY](select 列 from 表二 别名二 where 条件);
单行多列:select * from 表一 别名一where (列一, 列二) in (select 列1, 列2 from 表2 别名2 where 条件);
多行多列:select * from 表1 别名1, (select) 别名2 where 条件;
以上是关于mysql合并结果集的主要内容,如果未能解决你的问题,请参考以下文章