Mysql
從多個 ID 更新多個值
我有一個 SELECT 請求 - 它工作正常:
select meta_value from wp_posts v left join wp_postmeta pm on (pm.post_id = v.id) left join wp_posts p on (v.post_parent = p.id) where meta_key in ('_price','_regular_price') and v.post_type = 'product_variation' and p.id = '1743' limit 0,100
請求找到幾個相對於 id = 1743 的文章的元值。
它返回我 4(四個)需要的欄位,其值如下
400 500 300 350
我需要一個更新請求。
我試試
Update wp_posts set meta_value = 1000 where id IN (select v.id from wp_posts v left join wp_postmeta pm on (pm.post_id = v.id) left join wp_posts p on (v.post_parent = p.id) where meta_key in ('_price','_regular_price') and v.post_type = 'product_variation' and p.id = '1743')
但這會導致錯誤
1064 - 您的 SQL 語法有錯誤;檢查與您的 MariaDB 伺服器版本相對應的手冊,以了解要使用的正確語法
在第 2 行的“FROM wp_posts WHERE meta_key in (‘price’, ‘_regular_price’) 和 v.post’ 附近
此函式作為 UPDATE 的一部分
select v.id from wp_posts v left join wp_postmeta pm on (pm.post_id = v.id) left join wp_posts p on (v.post_parent = p.id) where meta_key in ('_price','_regular_price') and v.post_type = 'product_variation' and p.id = '1743'
返回我正確的 ID’S like
1744 1744 1745 1745
但是使用此選擇的 UPDATE 函式會出錯。
有錯誤???請幫幫我
MariaDB/MySQL 的各種版本中存在錯誤或可能缺少功能,這會阻止更新作為子選擇一部分的表。小例子:
create table A (x int not null, y int not null); insert into A (x,y) values (1,1),(2,2),(3,3); update A set y = 5 where x in ( select x from A where y in (1,2) ); ERROR 1093 (HY000): Table 'A' is specified twice, both as a target for 'UPDATE' and as a separate source for data
您可以通過將表隱藏在嵌套表中來欺騙 DBMS
update A set y = 5 where x in ( select x from ( select x from A where y in (1,2) ) as T ); Query OK, 2 rows affected (0.01 sec)
另一方面,MySQL 支持非標準更新,您可以在其中更新聯接,但由於您沒有提供創建表語句,我將把它排除在答案之外(我懶得弄清楚您的表是什麼樣的: -)