mysql合并结果集
答案:3 悬赏:20 手机版
解决时间 2021-03-24 03:32
- 提问者网友:呐年旧曙光
- 2021-03-23 22:49
mysql合并结果集
最佳答案
- 五星知识达人网友:孤独入客枕
- 2021-03-24 00:01
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)
而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)
全部回答
- 1楼网友:平生事
- 2021-03-24 01:57
不用那么复杂~~
简单做法
insert into pay_table (userid,goodsid,nub,payoff) values('1','2','3','4');
update user_table set douzi='123',zdouzi='21' where userid='1'
-------------------------
ok了,可以执行 了。
语法支持:
sql1;sql2;sql3
用分号分隔就ok了。(不能和select 语句一起用)
也就是说不需要返回结果集这种语句 都可以一起执行。
用分号分隔
---------------------------
略见,希望对你有帮助!
另外,团IDC网上有许多产品团购,便宜有口碑
简单做法
insert into pay_table (userid,goodsid,nub,payoff) values('1','2','3','4');
update user_table set douzi='123',zdouzi='21' where userid='1'
-------------------------
ok了,可以执行 了。
语法支持:
sql1;sql2;sql3
用分号分隔就ok了。(不能和select 语句一起用)
也就是说不需要返回结果集这种语句 都可以一起执行。
用分号分隔
---------------------------
略见,希望对你有帮助!
另外,团IDC网上有许多产品团购,便宜有口碑
- 2楼网友:千夜
- 2021-03-24 00:33
合并的时候,不要使用B.*之类的
要明确字段追问我改了,可是显示的结果和我之前的顺序有问题,两个查询语句的结果都不是里面的order by排序,而是按照id排序的。怎么回事呢?追答如果效率允许的话
在套一层,然后order by写在外面
要明确字段追问我改了,可是显示的结果和我之前的顺序有问题,两个查询语句的结果都不是里面的order by排序,而是按照id排序的。怎么回事呢?追答如果效率允许的话
在套一层,然后order by写在外面
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯