通过特定参数选择更新查询

时间:2013-10-30 19:31:31

标签: mysql

我尝试使用一个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来做到这一点

3 个答案:

答案 0 :(得分:1)

SQLFiddle

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。

sqlfiddle demo