首页 > 解决方案 > 使用子查询时出现 sql update 语句的问题

问题描述

我有 3 个表:PRICE、PRICE_PRODUCT、CHANGEABLE_PRICES。(我无法更改数据库中的数据建模)

问题是我有时需要根据 PRICE 表更新表 CHANGEABLE_PRICES。我可以通过 PRICE_PRODUCT 表和它们都存在的日期字段(Valid_date 和 date)链接这些表。我可以根据 PriceID 链接 PRICE 和 PRICE_PRODUCT。以及基于 ProductID、CompanyID、DeliveryID 的 PRICE_PRODUCT 和 CHANGEABLE_PRICES。表 CHANGEABLE_PRICES 和 PRICE 我只能通过 Valid_date 和 date 链接。

 CREATE TABLE [dbo].[PRICE](
    [PriceId] [int] NOT NULL,
    [Valid_date] [datetime] NOT NULL,
    [Price_Value] [decimal](18, 0) NOT NULL
) ON [PRIMARY]
GO

INSERT INTO PRICE VALUES (21, '2018-05-31', 45)
INSERT INTO PRICE VALUES (22, '2018-05-06', 10)

CREATE TABLE [dbo].[PRICE_PRODUCT](
    [PriceID] [int] NOT NULL,
    [ProductID] [int] NOT NULL,
    [CompanyID] [nvarchar](50) NOT NULL,
    [DeliveryID] [nvarchar](50) NOT NULL
) ON [PRIMARY]
GO

INSERT INTO PRICE_PRODUCT VALUES (21, 1, 'A', '001')
INSERT INTO PRICE_PRODUCT VALUES (22, 1, 'A', '001')


CREATE TABLE [dbo].[CHANGEABLE_Prices](
    [ProductID] [int] NOT NULL,
    [CompanyID] [nvarchar](50) NOT NULL,
    [DeliveryID] [nvarchar](50) NOT NULL,
    [Date] [datetime] NOT NULL,
    [Price_Value] [decimal](18, 0) NOT NULL
) ON [PRIMARY]
GO

我试图做这样的事情:

update CHANGEABLE_Prices set Price_Value = (select p.Price_Value from Price p inner join PRICE_PRODUCT pp
on p.PriceId = pp.PriceId, CHANGEABLE_PRICES cp where cp.ProductID = CHANGABLE_Prices.ProductID
and cp.CompanyID = CHANGABLE_Prices.CompanyID 
and cp.DeliveryID = CHANGABLE_Prices.DeliveryID
and p.Valid_date = CHANGABLE_Prices.date)

但我收到错误:

无法绑定多部分标识符“CHANGABLE_Prices.ProductID”。

并且不知道如何处理这个问题。

有任何想法吗?任何人,请?

提前致谢。

标签: sqlsql-server

解决方案


CHANGEABLE_Prices您尝试更新的表引用不在子查询的范围内。您需要在UPDATE没有子查询的情况下重写,如下所示:

update cp set Price_Value = p.Price_Value
from Price p
    inner join PRICE_PRODUCT pp on p.PriceId = pp.PriceId
    INNER JOIN CHANGEABLE_PRICES cp ON p.Valid_date = cp.date
        and cp.CompanyID = pp.CompanyID
        and cp.DeliveryID = pp.DeliveryID
        and p.Valid_date = p.date

推荐阅读