sql - 使用子查询时出现 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”。
并且不知道如何处理这个问题。
有任何想法吗?任何人,请?
提前致谢。
解决方案
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
推荐阅读
- python - 使用pandas python按组计算字符串中的单词数
- reactjs - Hooks 和 Redux / useEffect 聊天机器人
- django - Django 自定义模型管理器
- html - 如何为 django-google-analytics-app 设置 Django 标签?
- java - 在 for 循环中创建 JTextField 以逐步计算数字的 pow
- python - 无法在 Python 3 和 Jupyter 中导入包
- php - 入队样式和 js 文件,无论其名称如何
- powershell - Powershell import-csv 无法识别
- google-apps-script - Google 表格:在一些单元格中有 2-3 封电子邮件的电子邮件范围内查找一封电子邮件
- java - %1$s 在 application.properties 中引发异常