我在做查询。语句如下。
select count(*) as count ,cm_member.mem_hotel from cm_member where cm_member.mem_hotel like(select htl_sid from cm_hotel where cm_hotel.htl_country='20090312708827321319'  AND cm_hotel.htl_city='20090312339003708918' AND cm_hotel.sys_deleted='N' AND htl_status='Published' AND htl_draft='')  group by cm_member.mem_hotel order by  cm_member.mem_hotel ASC其中
(select htl_sid from cm_hotel where cm_hotel.htl_country='20090312708827321319'  AND cm_hotel.htl_city='20090312339003708918' AND cm_hotel.sys_deleted='N' AND htl_status='Published' AND htl_draft='')
语句查出来的是酒店的ID号,而在cm_member这张表中mem_hotel字段,存的就是酒店ID,不过,这个mem_hotel可以存好几个酒店ID,例如,酒店ID1,酒店ID2
他们中间用逗号分隔,
所以,我做查询,就想第一步得到酒店ID,然后在cm_member表中mem_hotel字段用like来比较酒店ID。但是我用LIKE报的错误是: Subquery returns more than 1 row 翻译过来是:子查询返回多个行1。大家来看看,是不是嵌套查询语句中不能用like,还是我写错了,大家帮忙纠正下,也让我学习学习。谢谢。

解决方案 »

  1.   

     是你的like 后面返回的不只一条数据,可能有很多条 你又没有做处理所以就报错啊!你可以处理一下将其拼接起来,也许可以
      

  2.   

    你最好使用关联查询再Like,函数中加语句应该是不行的,语句是个子查询。
      

  3.   

    select count(*) as count ,cm_member.mem_hotel from cm_member 
    where charindex(',' + (select top 1 htl_sid from cm_hotel where cm_hotel.htl_country='20090312708827321319' AND cm_hotel.htl_city='20090312339003708918' AND cm_hotel.sys_deleted='N' AND 
    htl_status='Published' AND htl_draft='')+ ',' , ',' + cm_member.mem_hotel + ',') > 0  group by cm_member.mem_hotel order by cm_member.mem_hotel ASC
      

  4.   

    高手呢?帮忙解决下这条SQL语句 啊
      

  5.   

    这样写肯定不行的啊,你参照楼上的charindex的写法来做
      

  6.   

    like后的select相当于一个list啊
    如果含有多个记录like铁定不行啊like改成in看看呢
      

  7.   


    参照楼上的,sql语句报错,我实在是搞不懂,怎么错了,用in 也不行。
      

  8.   

    假如  有两个 mem_hotel ,分别为   aa,bb,cc 和  kk,bb,ee ,而选出来的  htl_sid 为
    cc,则上面的 sql就是 先在 mem_hotel 两边加上分隔符,也就是逗号,变成  ,aa,bb,cc, 和
    ,kk,bb,ee,     然后htl_sid 两边加上分隔符 变成  ,cc,   ,最后看看  ,cc, 存在哪个
    mem_hotel 中 ,显然结果是存在于      ,aa,bb,cc, 中
      

  9.   


    是这样分析的,但是我运行sql语句,就报的是select top 1这里的错误,如果我把top 1拿掉,
    错误就是[Err] 1305 - FUNCTION cms_edm_new.CHARINDEX does not exist我不明白的是,加了个top 怎么就有问题了
      

  10.   

     我写的是给 sql server 用的,你用的该不是 mysql 吧,如果是自己转换一下
     
      

  11.   

    杯具...select a.mem_hotel from cm_member a 
    inner join cm_hotel b
    on charindex(b.htl_sid,a.mem_hotel)>0
    group by a.mem_hotel order by a.mem_hotel ASC
      

  12.   


    mysql怎么转换 ?不懂啊,
      

  13.   

    等待高手,或者,给另一种思路,如何把一个sql语句,分解成两条sql语句,?
      

  14.   

    不要用and,电脑会分不清的。最好用嵌套的SOL语句。最笨的办法,是一条执行后,插入到一个空表1中(下次使用前记录把这个表清空),再从这个插入数据的表1查询,当然也可以再搞个空表2,把结果插到表2中,再从表2执行你要的查询。虽然繁了一点,但准确有条理。如果你理解嵌套的SOL语句,最好用嵌套一句就解决了。