SQL WhereIn 條件數量

起初聽到一位學姊說:他同事耳根子很硬不聽勸告,由於SQL的WhereIn條件只能下1000個,所以他同事就改成10個query,但執行時間要30幾秒,一樣可以解決,但其他人都覺得應該要用JOIN方式才是比較好

我常使用的是MySQL,也時常使用子查詢用WhereIn 來做條件搜尋,都沒有遇過這種只能查1000個條件的問題產生,就好奇是不是不同的SQL會有不同的設定或限制。

MySQL

MySQL沒有限制WhereIn的條件數量,但是有限制每次Insert/Update的資料大小max_allowed_packet 參數

MsSQL

官方文件 來說,只有告知可以下的條件為數千個

Explicitly including an extremely large number of values (many thousands of values separated by commas) within the parentheses

有熱心的人士提供了測試,測試結果為32767
StackExchange

Oracle

限制的條件數量為1000

根據學姊同事的敘述來說,10個Query,可以改成以下寫法,也是可以使用1個Query完成

1
2
3
UPDATE task SET is_done = 1 
WHERE id IN (1,2,3,4 ... 1000)
OR id IN (1001, 1002 1003 ... 2000)