如何使用来自不同表的行的数据更新表中的所有行?

时间:2013-01-10 19:41:39

标签: sql sql-server sql-update row

我试图从另一个表上具有相同值的表中更新所有行(我只需要更新3列)...

这是我的表......

CREATE TABLE [dbo].[prods](
    [IdProducto] [int] IDENTITY(1,1) NOT NULL,
    [IdGrupo] [int] NULL,
    [IdCategoria] [int] NULL,
    [IdAlmacen] [varchar](50) NULL,
    [Codigo] [varchar](50) NULL,
    [Nombre] [varchar](50) NULL,
    [Descripcion] [varchar](max) NULL,
    [Cantidad] [int] NULL,
    [Imagen] [varchar](max) NULL,
    [StockMin] [int] NULL,
    [StockMax] [int] NULL,
    [Ancho] [varchar](50) NULL,
    [Alto] [varchar](50) NULL,
    [Largo] [varchar](50) NULL,
    [Peso] [varchar](50) NULL,
    [Volumen] [varchar](50) NULL,
    [Color] [varchar](50) NULL,
    [Material] [varchar](50) NULL,
    [Presentacion] [varchar](50) NULL,
    [bitPrecioVentaUnico] [int] NULL,
    [PrecioCompra] [money] NULL,
    [DescuentoCompra] [float] NULL,
    [PrecioVenta] [money] NULL,
    [DescuentoVenta] [float] NULL,
    [Estado] [varchar](20) NULL
)

CREATE TABLE [dbo].[prodnuevos](
    [Codigo] [int] NULL,
    [itemid] [int] NULL,
    [Item] [varchar](255) NULL,
    [Categoria] [varchar](255) NULL,
    [Cantidad] [int] NULL,
    [Minima] [nvarchar](255) NULL,
    [Costo] [money] NULL,
    [Valor] [money] NULL,
    [peso] [float] NULL,
    [unidades] [float] NULL
)

我想做的是以下......

Update prods 
Set prods.PrecioCompra = prodnuevos.Costo, 
prods.PrecioVenta = prodnuevos.Costo, 
prods.Cantidad = prodnuevos.Cantidad 
WHERE prods.Nombre = prodnuevos.Item;

(使用prodnuevos' Costo和Cantidad更新PrecioCompra,PrecioVenta和Cantidad,其中Nombre和Item相同)

显然上面的查询不起作用,但我只想解释我的问题。 我已经尝试了各种查询组合,并取得了成功。 (尽管必须更新3列,但我不介意,如果我必须使用3个不同的查询)

我尝试过像

这样的事情
    UPDATE       prods c
    SET          c.PrecioCompra =
      (SELECT        a.Costo
      FROM            prodnuevos AS a INNER JOIN
         prods AS z ON z.Nombre = a.Item 
WHERE        (a.Item = c.Nombre))

但没有结果......

我做错了什么?或者它是一个完全不同的查询? 提前谢谢。

4 个答案:

答案 0 :(得分:3)

Update prods Set 
prods.PrecioCompra = prodnuevos.Costo,
prods.PrecioVenta = prodnuevos.Costo, 
prods.Cantidad = prodnuevos.Cantidad
from prods inner join prodnuevos
on prods.Nombre = prodnuevos.Item

答案 1 :(得分:1)

你非常接近。尝试这样的事情:

UPDATE p SET p.PrecioCompra = pn.Costo, 
    p.PrecioVenta = pn.Costo, 
    p.Cantidad = pn.Cantidad
FROM prods p
INNER JOIN prodnuevos pn
ON p.Nombre = pn.Item

答案 2 :(得分:1)

update p
set
      p.PrecioCompra = pN.Costo
    , p.PrecioVenta = pN.Costo
    , p.Cantidad = pn.Cantidad 
from
    prods p
        inner join prodsnuevos pN on p.Nombre = pN.item

另外,你可以对Nombre和项目进行选择以验证它们是否相同?可能这两列只是没有相同的值

答案 3 :(得分:1)

Update 
    prods 
Set 
  PrecioCompra = prodnuevos.Costo, 
  PrecioVenta = prodnuevos.Costo, 
  Cantidad = prodnuevos.Cantidad 
FROM 
  prodnuevos
WHERE 
  prods.Nombre = prodnuevos.Item