步骤如下:
select * from ((SELECT uid,je,starttime,stoptime,1 as type from (SELECT id from members WHERE referer='4') as m JOIN (SELECT uid,je,starttime,stoptime from `cz` WHERE `status`>0) as c on c.uid=m.id)
union
(SELECT uid,je,starttime,stoptime,2 as type from (SELECT id from members WHERE referer='4') as m JOIN (SELECT uid,je,starttime,stoptime from `withdrawh` WHERE `state`=1) as w on w.uid=m.id)
) order by starttime
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。
MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
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)
selecttable_a.culumn1 as a1,table_a.culumn2 as a2,table_a.culumn3 as a3,
table_b.culumn1 as b1,table_b.culumn2 as b2,table_b.culumn3 as b3
from
(select * from a) as table_a
full join (select * from b) as table_b on table_a.time=table_b.time
你可以直接将这两个查询当做子句分别替换到括号内的内容中,字段根据需要换掉即可。
本回答仅以实现需求为先,若要提高效率需要另找办法了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)