select a.ID,a.support,b.Title,a.class,b.numberid from jfsky.Products a,jfsky.Class b where b.RootID<>'0' and length(b.title)=3 and instr(a.support,b.title)>0  order by a.ID
这是我的一条查询语句,我想要把b.numberid的值(字符型)update到a.class字段
这是我的写的
UPDATE JFSKY.PRODUCTS A SET CLASS=(SELECT B.NUMBERID FROM JFSKY.CLASS B WHERE B.ROOTID<>'0' and length(B.title)=3 and instr(A.support,B.title)>0) where exists(
select 1 from jfsky.Class b where instr(a.support,b.title)>0 )提示查询子语句结果比较多,执行不成功,求高手解决

解决方案 »

  1.   

    --如果B.ROOTID<>'0' and length(B.title)=3 and instr(A.support,B.title)>0
    --查询出多个的话 a的class更新为哪个呢?
    UPDATE JFSKY.PRODUCTS A SET CLASS=
    (SELECT max(B.NUMBERID) FROM JFSKY.CLASS B --例如选择最大的
     WHERE B.ROOTID<>'0' and length(B.title)=3 and instr(A.support,B.title)>0) 
    where exists(
    select 1 from jfsky.Class b where instr(a.support,b.title)>0 )
      

  2.   

    --可以使用rownum伪列来限制返回的行数
    UPDATE JFSKY.PRODUCTS A
       SET CLASS =
           (SELECT B.NUMBERID
              FROM JFSKY.CLASS B
             WHERE B.ROOTID <> '0'
               AND length(B.title) = 3
               AND instr(A.support, B.title) > 0
               AND ROWNUM < 2)
     WHERE EXISTS
     (SELECT 1 FROM jfsky.Class b WHERE instr(a.support, b.title) > 0);