mysql如何将2个结果集合并成一个结果集,列数,表头一样

mysql如何将2个结果集合并成一个结果集,列数,表头一样,第1张

步骤如下:

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中的UNION

ALL

而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)

select 

table_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

你可以直接将这两个查询当做子句分别替换到括号内的内容中,字段根据需要换掉即可。

本回答仅以实现需求为先,若要提高效率需要另找办法了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6112680.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-15
下一篇 2023-03-15

发表评论

登录后才能评论

评论列表(0条)

保存