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

SQL:案例限制(时间数量,然后是条件),sql,mysql,oracle,Sql,Mysql,Oracle,考虑这个查询(它同时在Oracle和MySQL上运行) 这个查询可能会变得相当大,所以我想知道单个查询所能容纳的条件数量限制是多少(何时,然后是语句)。有办法绕过它吗 例如: 我知道在中可以传递给的最大值是1000,为了克服这个问题,我们可以这样做 `WHERE TABLE1_ID IN ([1000 values]) OR TABLE1_ID IN ([more values])` 在MySQL中,您仅受到查询字节大小的限制。这由服务器的“允许的最大数据包”设置控制。我不能代表Oracle说

考虑这个查询(它同时在Oracle和MySQL上运行)

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

例如:
我知道在中可以传递给
的最大值是1000,为了克服这个问题,我们可以这样做

`WHERE TABLE1_ID IN ([1000 values]) OR TABLE1_ID IN ([more values])`

在MySQL中,您仅受到查询字节大小的限制。这由服务器的“允许的最大数据包”设置控制。我不能代表Oracle说话。

将您的信件放入帮助表:

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

如果有很多这样的case语句,应该将它们移动到一个表中以简化:

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
这要简单得多。

的文档可以说:

表中参数的最大数目 大小写表达式为255。全部的 表达式计算在这个极限上, 包括a的初始表达式 简单的CASE表达式及其应用 可选的ELSE表达式。每次 ... 然后,pair算作两个参数。 为避免超过此限制,您可以 嵌套大小写表达式,以便 return_expr本身就是一个例子 表情


你赢了我26秒。。。有时我想知道你是怎么做到的。@Quassnoi:不插入游标执行@Quassnoi:我将其绑定,以便可以快速地说“NOT CURSOR!NOT CURSOR!”WHERE子句是不必要的-您已经在CASE语句中按table1_id进行筛选。WHERE子句是绝对必要的。如果没有它,您将更新表中的每一行,那些在CASE语句中没有特别提到的TABLE1\u ID行将被设置为NULL。至少,这是你在Oracle中的行为——我无法想象MySQL在这方面会有什么不同。虽然这可能很好,但我认为这种更新语法在Oracle中不起作用。
UPDATE table1
SET something_id = NewTable.result
INNER JOIN NewTable
ON table1.table1_id = NewTable.table1_id