Mysql

從多個 ID 更新多個值

  • June 29, 2017

我有一個 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 支持非標準更新,您可以在其中更新聯接,但由於您沒有提供創建表語句,我將把它排除在答案之外(我懶得弄清楚您的表是什麼樣的: -)

引用自:https://dba.stackexchange.com/questions/177591