3C科技 娛樂遊戲 美食旅遊 時尚美妝 親子育兒 生活休閒 金融理財 健康運動 寰宇綜合

Zi 字媒體

2017-07-25T20:27:27+00:00
加入好友
一般情況下,我們可以很簡單的利用 Limit 語法在進行資料異動中限制影響範圍。 MySQL UPDATE `my_table` SET `my_col` = 'data' LIMIT 2; 1 UPDATE `my_table` SET `my_col` = 'data' LIMIT 2;   但是涉及使用子查詢的情境時,這招便不管用了。 例如今天資料長這樣: +--------+--------+ | number | my_col | +--------+--------+ | 1 | a | | 1 | a | | 2 | b | | 2 | b | | 3 | c | | 3 | c | +--------+--------+ 12345678910 +--------+--------+| number | my_col |+--------+--------+|      1 | a      ||      1 | a      ||      2 | b      ||      2 | b      ||      3 | c      ||      3 | c      |+--------+--------+   我想要 Update 前面兩種資料,也就是要下 Limit 2,但是 number 一樣的話就要一起 Update,所以 number 為 1 和 2 的 record 應該都要 Update,所以預期應該要有 4 筆 record 被 Update。直覺利用 Sub-Query 應該可以做到: MySQL UPDATE `my_table` SET `my_col` = 'data' WHERE `number` IN ( SELECT DISTINCT `number` FROM `my_table` LIMIT 2 ); 123 UPDATE `my_table` SET `my_col` = 'data' WHERE `number` IN (    SELECT DISTINCT `number` FROM `my_table` LIMIT 2);   但是如果在 MariaDB/MySQL 5.5 或之後的版本執行時應該會得到 [Err] 1235 - This version of MariaDB doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'。   那這樣要怎麼辦呢?工具是死的,人是活的,Stackoverflow 就有人想到辦法繞過去了 。我們把 Limit 語法放到第三層子查詢(子查詢中的子查詢)就好了! MySQL UPDATE `my_table` SET `my_col` = 'data' WHERE `number` IN ( SELECT `number` FROM ( SELECT DISTINCT `number` FROM `my_table` LIMIT 2 ) as `sub_query_2` ); 12345 UPDATE `my_table` SET `my_col` = 'data' WHERE `number` IN (    SELECT `number` FROM (        SELECT DISTINCT `number` FROM `my_table` LIMIT 2    ) as `sub_query_2`);   Reference: MySQL – UPDATE query with LIMIT – Stack Overflow [MariaDB/MySQL] 在 Update 子查詢中使用 Limit 限制影響範圍 was last modified: 2018-06-13 by Calos

本文由caloskaoorg提供 原文連結

寫了 5860316篇文章,獲得 23313次喜歡
精彩推薦