這個問題在這里已經有了答案: 為評估 true 的 IN 條件元素設定限制 (1 個回答) 10 小時前關閉。
我正在嘗試撰寫一個如下所示的查詢:
Select * from table1 where field1 = 4 and field2 in (2,3,4,5);
假設我的 field2 串列中的每個元素都需要 25 行(總共 100 行),我該如何實作?
uj5u.com熱心網友回復:
如果您將 ROW_NUMBER 添加到您的查詢中,并將 field2 作為 Ppartition,您可以選擇每個欄位所需的行數。
你必須ORDER BY在視窗函式中添加一個tio 才能得到正確的行,但我對你的表了解得不夠多
SELECT *
FROM
(Select *, ROW_NUMBER() OVER(PARTITION BY fild2 ) rn from table1 where field1 = 4 and field2 in (2,3,4,5)) t2
WHERE rn <= 4
這是 mysql 5.7 的版本
CREATE TABLE table1 ( field1 int ,field2 int)
INSERT INTO table1 VALUES(4,2),(4,2),(4,2),(4,2),(4,2),(4,3),(4,3),(4,3),(4,3),(4,4)
SELECT * FROM (SELECT field1, IF (@field2 = field2 ,@row_number := @row_number 1,@row_number := 1) AS rn, @field2 := field2 field2 FROM (SELECT * FROM table1 where field1 = 4 and field2 in (2,3,4,5) ORDER BY field2) t1, (SELECT @field2:=0,@row_number:=0) as t ) t2 WHERE rn <= 4
欄位 1 | 恩 | 欄位 2
-----: | -: | -----:
4 | 1 | 2
4 | 2 | 2
4 | 3 | 2
4 | 4 | 2
4 | 1 | 3
4 | 2 | 3
4 | 3 | 3
4 | 4 | 3
4 | 1 | 4
db<>在這里擺弄
uj5u.com熱心網友回復:
如果您對此感到擔憂,則說明您遇到了架構問題。限制是存在的,但你必須避免它甚至一半,無論如何錯誤地消耗你自己的資源。
對此有幾種解決方案,但正常情況是制作一個臨時(USP)或確定的事務表,將資料放入其中,選擇/加入資料并洗掉臨時表/截斷確定表,使用后。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/330806.html
標籤:mysql
下一篇:從總交易量計算每日交易量
