考虑查询(它在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)
Run Code Online (Sandbox Code Playgroud)
这个查询可能会变得非常大,所以我想知道单个查询可以容纳的条件数(WHEN,THEN语句)的限制是多少.有办法解决吗?
例如:
我知道可以传递给的最大值数IN是1000,我们可以做到这一点
`WHERE TABLE1_ID IN ([1000 values]) OR TABLE1_ID IN ([more values])`
Run Code Online (Sandbox Code Playgroud)
Qua*_*noi 12
将您的通信放入帮助表:
id value
1446 423
2372 426
…
Run Code Online (Sandbox Code Playgroud)
并加入.
在Oracle:
UPDATE (
SELECT something_id, value
FROM table1
JOIN helper
ON table1.table1_id = helper.id
)
SET something_id = value
Run Code Online (Sandbox Code Playgroud)
(别忘helper.id了PRIMARY KEY为此工作)
在MySQL:
UPDATE table1
JOIN helper
ON table1.table1 = helper.id
SET table1.something_id = value
Run Code Online (Sandbox Code Playgroud)
如果你有很多像这样的case语句,你应该把它们移到一个表中来简化:
NewTable
table1_id | result
-----------+---------
1446 | 423
2372 | 426
... | ...
Run Code Online (Sandbox Code Playgroud)
然后在您的查询中加入它:
UPDATE table1
SET something_id = NewTable.result
INNER JOIN NewTable
ON table1.table1_id = NewTable.table1_id
Run Code Online (Sandbox Code Playgroud)
它简单得多.
| 归档时间: |
|
| 查看次数: |
12224 次 |
| 最近记录: |