【问题标题】:update columns values with column of another table based on condition [duplicate]根据条件用另一个表的列更新列值[重复]
【发布时间】:2010-12-17 07:07:25
【问题描述】:

我有两张桌子...

table1 (id, item, price) 值:

id | item | price
-------------
10 | book | 20  
20 | copy | 30   
30 | pen  | 10

....table2 (id, item, price) 值:

id | item | price
-------------
10 | book | 20
20 | book | 30

现在我想:

update table1 
   set table1.Price = table2.price 
 where table1.id = table2.id
   and table1.item = table2.item.

我该怎么做?

【问题讨论】:

  • @mrp:您不应该将每个 RDBM 作为标签,因为有人可能会建议您提供一些特定于供应商的解决方案。

标签: sql mysql sql-server oracle


【解决方案1】:

应该这样做:

UPDATE table1 
   SET table1.Price = table2.price 
   FROM table1  INNER JOIN  table2 ON table1.id = table2.id

你也可以试试这个:

UPDATE table1 
   SET price=(SELECT price FROM table2 WHERE table1.id=table2.id);

【讨论】:

  • 它给了我错误信息:invalid object table1。
  • 它给我错误多部分标识符“table1.price”无法绑定。
  • @Sam,那是因为您在 UPDATE 和 FROM 子句中引用了 table1(同一个表被引用了两次)。根据脚本,您实际上是在更新正在查询的表中的字段,而不是正在更新的字段。 SET 子句应该引用 UPDATE 表,即UPDATE table1 SET price = b.price FROM (SELECT id, price AS p FROM table1) a INNER JOIN table2 b on a.id = b.id
  • 它在 mysql 中不起作用
  • mysql:UPDATE table1 INNER JOIN table2 ON table1.id = table2.id SET table1.Price = table2.price可以使用
【解决方案2】:

这肯定会奏效:

UPDATE table1
SET table1.price=(SELECT table2.price
  FROM table2
  WHERE table2.id=table1.id AND table2.item=table1.item);

【讨论】:

  • 但这更新了更多的行数:(比它...
  • 它应该只更新内部查询中返回的行数,但将更新的行数加倍:(
  • 正在更新双...
  • 这应该是公认的答案,因为大多数 DB 支持 UPDATE 语句的子查询,而不是连接。 @niceApp
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-24
  • 2019-10-14
  • 2019-08-20
  • 1970-01-01
  • 2011-11-25
  • 1970-01-01
  • 2018-10-24
相关资源
最近更新 更多