不能作:“子查询用作表达式时”

hzybc 2014-01-17 09:38:44
select id from BhB
where Bh in (select bh from bhb where glid=(select glid from bhb where bh='10838318'))

这句是可以执行的,当放在case when中,

select id from BhB where Bh in (
case when(select glid from bhb where bh='10838318')=0
then (select bh from bhb where bh='10838318')
else (select bh from bhb where glid=(select glid from bhb where bh='10838318'))
end)

就出现错误,“子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。”

是不能作:“子查询用作表达式时”
该怎么解决?

请高手帮助
...全文
160 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
hzybc 2014-01-17
  • 打赏
  • 举报
回复
居然结不了贴,晕到
hzybc 2014-01-17
  • 打赏
  • 举报
回复
明明是对的,却总是提示“给分与总分不符”,难道我连100以内的加法都不会了,555
hzybc 2014-01-17
  • 打赏
  • 举报
回复
用10楼的方法搞定,有个BH, select id from BhB t1 where exists (select bh from bhb t2 where t2.bh=t1.bh and exists(select bh from bhb t3 where t2.glid=t3.glid and t3.GLID<>0 and t3.bh='54201')) or exists(select bh from bhb t4 where t4.bh=t1.bh and t4.bh='54201')
  • 打赏
  • 举报
回复
因为你使用了子查询,而当子查询返回多于1个值的时候,就不能再用 = 号了,只能用in或者exists
---涛声依旧--- 2014-01-17
  • 打赏
  • 举报
回复

--建议改用exists
select id from BhB t1
  where exists (select bh from bhb t2 where  t2.bh=t1.bh
and exists(select 1 from bhb b3 where t2.glid=t3.glid and bh='10838318'))
發糞塗牆 2014-01-17
  • 打赏
  • 举报
回复
case when 是表达式,而你那个是集合,所以报错
hzybc 2014-01-17
  • 打赏
  • 举报
回复
我不加case when 单独执行这二个语句都能执行的
hzybc 2014-01-17
  • 打赏
  • 举报
回复
select glid from bhb where bh='10838318' 能保证只有一条记录的
發糞塗牆貮號 2014-01-17
  • 打赏
  • 举报
回复
if (select glid from bhb where bh='10838318')=0 --如果返回多条会报错 select id from BhB where Bh in (select bh from bhb where bh='10838318') else select id from BhB where Bh in (select bh from bhb where glid=(select glid from bhb where bh='10838318'))
guguda2008 2014-01-17
  • 打赏
  • 举报
回复
glid=(select glid from bhb where bh='10838318') 这句的问题 当括号里的查询只返回一条记录时,不会报错。 当括号里的查询返回多条记录时,就会报你那个错,因为无法把一个值和多个值用等号比较。 处理方法要么是保证后面的查询只返回一条记录,如创建唯一索引,或者在确保查询语义正确的情况下把=改成in
hzybc 2014-01-17
  • 打赏
  • 举报
回复
引用 1 楼 大鹏展翅 的回复:
分支呗 if elseif else
在SQL中,有if语句,请教方法
hzybc 2014-01-17
  • 打赏
  • 举报
回复
实际是有多条记录的
Yole 2014-01-17
  • 打赏
  • 举报
回复
子查询里面有大于1条的数据,要是取得的bh有不同的几条数据,就会报错; 如果是重复的,可以用一下方法改正:


 select id from BhB where Bh in (
  case when(select distinct glid from bhb where bh='10838318')=0
then (select distinct bh from bhb where  bh='10838318') 
else (select distinct bh from bhb where glid=(select distinct glid from bhb where bh='10838318'))
 end)

發糞塗牆貮號 2014-01-17
  • 打赏
  • 举报
回复
分支呗 if elseif else

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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