mysql合并结果集
(SELECTB.*,A.*FROMqb_fenlei_contentALEFTJOINqb_fenlei_content_1BONA.id=B.idWHEREA.fid...
(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.*,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' ORDER BY A.tuiguang DESC, A.list DESC)
这两个select语句挺复杂的,单独查能出来,但是合并后就报错
Lost connection to MySQL server during query
请问我要怎么修改?高手求解。 展开
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.*,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' ORDER BY A.tuiguang DESC, A.list DESC)
这两个select语句挺复杂的,单独查能出来,但是合并后就报错
Lost connection to MySQL server during query
请问我要怎么修改?高手求解。 展开
3个回答
展开全部
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)
2011-05-06
展开全部
不用那么复杂~~
简单做法
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网上有许多产品团购,便宜有口碑
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
合并的时候,不要使用B.*之类的
要明确字段
要明确字段
追问
我改了,可是显示的结果和我之前的顺序有问题,两个查询语句的结果都不是里面的order by排序,而是按照id排序的。怎么回事呢?
追答
如果效率允许的话
在套一层,然后order by写在外面
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询