代码之家  ›  专栏  ›  技术社区  ›  Virat Kadaru

SQL:案例限制(时间数量,然后是条件)

  •  4
  • Virat Kadaru  · 技术社区  · 15 年前

    考虑查询(它在Oracle和MySQL上运行)

    UPDATE table1
    SET something_id = CASE 
      WHEN table1_id = 1446 THEN 423 
      WHEN table1_id = 2372 THEN 426 
      WHEN table1_id = 2402 THEN 428 
      WHEN table1_id = 2637 THEN 429 
      WHEN table1_id = 2859 THEN 430 
      WHEN table1_id = 3659 THEN 433 
    END 
    WHERE table1_id IN (1446,2372,2402,2637,2859,3659)
    

    这个查询可能会变得相当大,所以我想知道单个查询所能容纳的条件数量限制是多少(何时,然后是语句)。有办法绕过它吗?

    例如:
    我知道可以传递给的最大值数 IN 是1000,要克服这一点,我们可以做到

    `WHERE TABLE1_ID IN ([1000 values]) OR TABLE1_ID IN ([more values])`
    
    4 回复  |  直到 15 年前
        1
  •  12
  •   Quassnoi    15 年前

    id   value
    
    1446  423
    2372  426 
    …
    

    加入。

    在里面 Oracle :

    UPDATE  (
            SELECT  something_id, value
            FROM    table1
            JOIN    helper
            ON      table1.table1_id = helper.id
            )
    SET     something_id = value
    

    (别忘了做点什么 helper.id A. PRIMARY KEY

    在里面 MySQL :

    UPDATE  table1
    JOIN    helper
    ON      table1.table1 = helper.id
    SET     table1.something_id = value
    
        2
  •  7
  •   Welbog    15 年前

    NewTable
    table1_id  | result
    -----------+---------
    1446       | 423
    2372       | 426
    ...        | ...
    

    然后在查询中加入它:

    UPDATE table1
    SET something_id = NewTable.result
    INNER JOIN NewTable
    ON table1.table1_id = NewTable.table1_id
    

    这要简单得多。

        3
  •  7
  •   skaffman    15 年前

    10gR2 说:

    表中参数的最大数目 大小写表达式为255。全部的 表达式计算在这个极限上, 可选的ELSE表达式。每次 ... 然后,pair算作两个参数。 嵌套大小写表达式,以便 return_expr本身就是一个例子

        4
  •  4
  •   hobodave    15 年前