联合查询的问题,第一次为真就不查询第二次,如果为否需要查询第二次。

fisheep_works 2012-02-27 09:39:11
select if(1,-1,(select 2));
如果第二次查询的是一个字段 这样就可以了。

但如果第二次需要返回两个字段如何处理呢?!

select if(1,-1,(select 2,3));这样就不行咯!。。。。
...全文
80 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2012-02-28
  • 打赏
  • 举报
回复
select * from a where id=1
union all
select * from b where (select count(*) from table_a)=0
rucypli 2012-02-28
  • 打赏
  • 举报
回复
select 2,3这个返回的算是一个结果集
wwwwb 2012-02-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 fisheep_works 的回复:]

select if((select count(*) from table_a)>0,-1,(select `A` from table_b));

意思是先查询表a,如果存在就不用再查询了,如果不存在就查询表b,如果返回表b的一个字段是可以的。

问题是如何返回表b的两个字段?!
[/Quote]
子查询只能返回1个字段,不能返回两个,用变通的方法吧,用SP也可以
珠海-天堂 2012-02-28
  • 打赏
  • 举报
回复
用存储过程来做吧。
wwwwb 2012-02-28
  • 打赏
  • 举报
回复
select DISTINCT IF(aa>0,-1,b.a), iF(aa>0,-1,b.b) from
(select count(*) as a from table_a) a,table_b b
fisheep_works 2012-02-28
  • 打赏
  • 举报
回复
select if((select count(*) from table_a)>0,-1,(select `A` from table_b));

意思是先查询表a,如果存在就不用再查询了,如果不存在就查询表b,如果返回表b的一个字段是可以的。

问题是如何返回表b的两个字段?!
wwwwb 2012-02-28
  • 打赏
  • 举报
回复
子查询中只能返回1个字段,select 2,3是两个字段

写成2个字段即可
select if(1,-1,(select 2)),if(1,-1,(select 3))
具体问题是什么
ACMAIN_CHM 2012-02-28
  • 打赏
  • 举报
回复
select if(1,-1,(select 2)),if(1,-1,(select 3));


只能分开。

但这个应用非常奇怪,建议楼主举实际例子,这样可以根据实际应用看看有没有更适合的方案。
fisheep_works 2012-02-28
  • 打赏
  • 举报
回复
谢谢你了,暂时先就这样吧。。。
wwwwb 2012-02-28
  • 打赏
  • 举报
回复
是,因为你要根据(select count(*) as a from table_a)的结果来判断取值
fisheep_works 2012-02-28
  • 打赏
  • 举报
回复
每个查询不是独立分开的
fisheep_works 2012-02-28
  • 打赏
  • 举报
回复
储存过程,有顾虑,数据库是一个线程查询,但程序是多线程轮流进行查询的。
fisheep_works 2012-02-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wwwwb 的回复:]

select DISTINCT IF(aa>0,-1,b.a), iF(aa>0,-1,b.b) from
(select count(*) as a from table_a) a,table_b b
[/Quote]

小弟不懂DISTINCT的作用,

在不管DISTINCT的意义的情况下
select IF(a.a>0,-1,b.a), iF(a.a>0,-1,b.b) from (select count(*) as a from table_a) a,table_b b
这样是达到要求了。

但我有个疑问:这样不是就执行了两次查询么?
wwwwb 2012-02-28
  • 打赏
  • 举报
回复
SP是指split切割的意思么?!
存储过程
fisheep_works 2012-02-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wwwwb 的回复:]

引用 4 楼 fisheep_works 的回复:

select if((select count(*) from table_a)>0,-1,(select `A` from table_b));

意思是先查询表a,如果存在就不用再查询了,如果不存在就查询表b,如果返回表b的一个字段是可以的。

问题是如何返回表b的两个字段?!

子查询只能返回1个字段,不能返回两个,用变……
[/Quote]

SP是指split切割的意思么?!

我也想过把两个字段用小数点结合起来,然后取得数据后再分开。

现在来请教前辈是不是有更好的办法解决。

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧