我尝试使用一个mysql查询通过特定参数更新表中的所有值 我有这个结构:
seller_id | product | value
1 | apple | 100
1 | onion | 50
1 | cherry | 20
1 | lemon | 200
2 | apple | 10
2 | onion | 40
2 | lemon | 100
3 | apple | 10
3 | lemon | 50
3 | orange | 140
通常我会使用多个查询进行更新:一次选择和多次更新,我想在大型数据库中只进行一次查询以获得更好的性能
SELECT `product` FROM table WHERE seller_id = '1' AND `value` > '0'
while($r = mysql_fetch_row($query))
{
$list[] = $r['0'];
}
foreach($list as $k => $i)
{
UPDATE `table` SET `value`='100' WHERE product = '$i'
// updated: apple:100; onion:100; cherry:100; lemon:100; for all seller which have it
}
我尝试从此处进行一次查询,我需要将所有产品存储在卖家的存储中:1并更新所有卖家中的一些价值女孩有此产品
我尝试这样的东西,但它不起作用 (#1093 - 您无法在FROM子句中为更新指定目标表'table')
UPDATE table SET value='100' WHERE product =
(SELECT `product` FROM table WHERE seller_id = '1')
我需要更多性能,我不想使用PHP来做到这一点
答案 0 :(得分:1)
UPDATE tab_name AS t1
INNER JOIN tab_name AS t2 ON t1.product = t2.product
SET t1.value = 100
WHERE t2.seller_id = 1;
答案 1 :(得分:0)
你必须给你的subselect或其他方式新的别名直接把where条件
UPDATE table SET value='100' WHERE product IN(
SELECT t.`product` FROM (SELECT `product` FROM table WHERE seller_id = '1') t )
答案 2 :(得分:0)
怎么样:
UPDATE table1 AS a
INNER JOIN table1 AS b ON b.product = a.product
SET a.value = 100
WHERE b.seller_id = 1;
它将按产品加入并更新sell_id = 1。