我有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。
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”不能为 绑定。
,不知道如何处理此问题。
有什么想法吗?有人吗?
提前谢谢。
答案 0 :(得分:1)
您要更新的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
答案 1 :(得分:0)
大概是您打算的:
update CHANGEABLE_Prices
set Price_Value = (select p.Price_Value
from Price p inner join
PRICE_PRODUCT pp
on p.PriceId = pp.PriceId
where cp.ProductID = CHANGABLE_Prices.ProductID and
cp.CompanyID = CHANGABLE_Prices.CompanyID and
p.DeliveryID = CHANGABLE_Prices.DeliveryID and
p.Valid_date = CHANGABLE_Prices.date
);
也就是说,您需要相关条件才能将子查询连接到外部查询。
使用说明JOIN
可能会更好。但是,两种方法略有不同:
JOIN
版本将使用任意匹配值。NULL
。那可能不是您真正想要的,但是您尝试的版本会建议您想要这种行为。