我需要一种从子查询访问内部表中的列的方法,下面将其包含在数据库/表名称中,并进行了更改。内部查询返回具有特定术语config并属于特定客户的所有Item的Item_Id。显然,由于我无法从主查询访问create an account on a website
x=1
while x <2
-> login and ask to be remembered
-> delete the cookie
do();
的任何行,因此SET目前无法正常工作。
我对SQL还是很陌生,我正在努力地思考如何将其转换为使用联接而不是子查询。问题是我需要能够为来自子查询的任何Item_Id设置所有总计。
let
编辑:从子查询中添加示例行
列是Id,DataValueStatus,CurrentValue,PreviousValue,Item_Id,TermConfig_Id。子查询仅返回Item_Id,但这就是其余数据。
UPDATE [Database].[dbo].[Items]
SET GrandTotal = GrandTotal / let.CurrentValue
WHERE Id IN (
SELECT let.Item_Id
FROM [Database].[dbo].[ItemTerms] let
WHERE TermConfig_Id = 'TERM_CONFIG_ID'
AND Item_Id IN (
SELECT le2.Id
FROM [Database].[dbo].[LaneExhibits] le2
WHERE Customer_Id = 'CUST_ID'
)
)
答案 0 :(得分:2)
内部联接版本:
UPDATE i
SET GrandTotal = GrandTotal / let.CurrentValue
FROM [Database].[dbo].[Items] i
INNER JOIN [Database].[dbo].[ItemTerms] let ON i.Id=let.Item_Id
WHERE TermConfig_Id = 'TERM_CONFIG_ID'
AND Item_Id IN (
SELECT le2.Id
FROM [Database].[dbo].[LaneExhibits] le2
WHERE Customer_Id = 'CUST_ID'
)
答案 1 :(得分:0)
合并是您的朋友https://docs.microsoft.com/en-us/sql/t-sql/statements/merge-transact-sql?view=sql-server-2017
示例中的简化示例
MERGE [Database].[dbo].[Items] AS target
USING (SELECT let.Item_Id, let.CurrentValue FROM [Database].[dbo].[ItemTerms] let
/* other joins and filters here */
) AS source (Item_Id, CurrentValue)
ON (target.Item_Id = source.id /* or what you want */)
WHEN MATCHED THEN
UPDATE SET GrandTotal = source.GrandTotal / source.CurrentValue