我想在我的MySQL数据库上运行一些更新。这是我想要使用的查询:
UPDATE `wphh_wp_eStore_tbl`
SET `wphh_wp_eStore_tbl`.description = '<div class="dwrp">
<h2>F. Locker $109.99</h2>
<h2>Nike Outlet $109.99</h2>
<h2>Ch. Sports $107.99</h2>
<h2>Hoopers Hookup $89.99</h2>
<h2 class="special">These prices as of 11/20/13</h2>'
WHERE `wphh_wp_eStore_tbl`.id in (
SELECT `wphh_wp_eStore_tbl`.id FROM `wphh_wp_eStore_tbl`
INNER JOIN `wphh_wp_eStore_cat_prod_rel_tbl`
on `wphh_wp_eStore_cat_prod_rel_tbl`.prod_id = `wphh_wp_eStore_tbl`.id
WHERE `wphh_wp_eStore_cat_prod_rel_tbl`.cat_id = 5
)
这会产生以下错误:
#1093
- 您无法在FROM子句中为更新指定目标表'wphh_wp_eStore_tbl'
为什么呢?我知道在MSSQL中我可以这样做:
Update tableone
set columnname = 'xxx'
where id in (
select id
from tableone
where category = 10)
它有效。
我错过了什么?
答案 0 :(得分:1)
简单的解决方案是将in
列表括在一个额外的嵌套级别中。然后MySQL将实现数据:
UPDATE `wphh_wp_eStore_tbl`
SET `wphh_wp_eStore_tbl`.description = '<div class="dwrp">
<h2>F. Locker $109.99</h2>
<h2>Nike Outlet $109.99</h2>
<h2>Ch. Sports $107.99</h2>
<h2>Hoopers Hookup $89.99</h2>
<h2 class="special">These prices as of 11/20/13</h2>'
WHERE `wphh_wp_eStore_tbl`.id in (
select * from (SELECT `wphh_wp_eStore_tbl`.id FROM `wphh_wp_eStore_tbl`
INNER JOIN `wphh_wp_eStore_cat_prod_rel_tbl` on `wphh_wp_eStore_cat_prod_rel_tbl`.prod_id = `wphh_wp_eStore_tbl`.id
WHERE
`wphh_wp_eStore_cat_prod_rel_tbl`.cat_id = 5) t
)
另一种方法是将join
与update
一起使用。
答案 1 :(得分:0)
我不是MySQL人,但你可以这样做吗?我也喜欢使用这些丑陋名称的表别名。
UPDATE `wphh_wp_eStore_tbl` e
inner join `wphh_wp_eStore_cat_prod_rel_tbl` ecpr
on ecpr.prod_id = e.id
and ecpr.cat_id = 5
set e.description = 'Some Text To Update With'
在SQL Server中,“from”和联接在SET之后但是......显然不是mySQL中的情况。