【问题标题】:SQL with WITH clause too many values error带有 WITH 子句的 SQL 值太多错误
【发布时间】:2016-10-22 09:22:40
【问题描述】:

--此查询返回“值过多”错误。我不确定为什么?

   update myTable
            set var1= var2
            WHERE value1 IN (

             WITH X AS
            (
            select value1, value2, var1,var2, ROW_NUMBER()
            OVER
            (PARTITION BY value1 ORDER BY value1 desc) as rn
            from
              mytable WHERE var1 is null AND rownum>0 and rownum<=10 order by value1 asc
            )
            SELECT
            value1, value2, var2,var1
           FROM X WHERE rn=1  and var1 is null and rownum>0 and rownum<=10);

【问题讨论】:

    标签: sql oracle11g sqlplus with-statement


    【解决方案1】:

    错误too many values 是因为查询具有value1 IN (),其中在内部查询中选择了多个列。为避免这种情况,只需在内部查询中使用select value1。

    update myTable
    set var1 = var2
    WHERE value1 IN
         (select value1 from 
           (select value1, value2, var1,var2, 
            ROW_NUMBER() OVER (PARTITION BY value1 ORDER BY value1 desc) as rn
            from mytable 
            WHERE var1 is null
            ) t 
          where rn <= 10
          )
    

    【讨论】:

      【解决方案2】:

      我认为使用exists 可以更好地满足您的意图:

      update myTable
          set var1 = var2
          where exists (select 1
                        from (select value1, value2, var1, var2, 
                                     ROW_NUMBER() OVER (PARTITION BY value1 ORDER BY value1 desc) as rn
                             from mytable 
                             where var1 is null
                            ) x
                        where mytable.value1 in (x.value1, x.value2, x.var1, x.var2) and
                              rn <= 10
                       );
      

      【讨论】:

        猜你喜欢
        • 2016-03-10
        • 2016-08-27
        • 1970-01-01
        • 2017-12-22
        • 1970-01-01
        • 2012-01-21
        • 2011-05-06
        • 2021-01-29
        • 1970-01-01
        相关资源
        最近更新 更多