我试图在 SSMS 中运行此查询,但出现错误
Sql 错误号:512。错误信息:子查询返回超过 1 个值
MERGE datawarehouse.product t
USING
(
SELECT
(StyleCode + ColorwaySAPID) as OptionID,
ColorwayName,
StyleCode,
[Description],
Division,
lclChannel,
(select [label] FROM import.enumneckline e
inner join import.Product p
ON e.Enumeration_Value = p.lclNeckLine2
) as NeckLine,
ValidationFlag,
ValidationMessage,
[Timestamp],
[Customer_Timestamp]
FROM import.product
) s
ON t.OptionID = s.OptionID
WHEN MATCHED THEN
UPDATE
SET
t.OptionIDName = s.ColorwayName,
t.StyleID = s.StyleCode,
t.StyleName = s.[Description],
t.DepartmentID = s.Division,
t.RegionChannelName = s.lclChannel,
t.lclNeckline2 = s.[Neckline],
t.ValidationFlag = 'OK',
T.ValidationMessage = NULL,
T.[Timestamp] = S.[Timestamp],
T.[Customer_Timestamp] = S.[Customer_Timestamp]
WHEN NOT MATCHED BY TARGET THEN
INSERT
(
OptionId,
OptionIDName,
StyleID ,
StyleName,
DepartmentID,
RegionChannelName,
lclNeckline2,
ValidationFlag,
ValidationMessage,
[TimeStamp],
Customer_Timestamp
)
VALUES
(
s.OptionID,
s.ColorwayName,
s.StyleCode,
s.[Description],
s.Division,
s.lclChannel,
s.[Neckline],
'Ok',
s.ValidationMessage,
s.[TimeStamp],
s.Customer_Timestamp
);
我不确定我在这里做错了什么。连接仅返回 1 value = 'label' 并且我没有使用表对象来提取任何其他数据。我在这里做错了什么?
任何帮助将不胜感激
我期待 DWH 表加载选择值
可能问题出在返回
NeckLine
的子查询上:
SELECT (StyleCode + ColorwaySAPID) as OptionID,
...,
(
SELECT [label]
FROM import.enumneckline e
INNER JOIN import.Product p
ON e.Enumeration_Value = p.lclNeckLine2
) as NeckLine,
...
FROM import.product
子查询中没有
WHERE
子句限制返回哪些行,因此这会带来两个表之间匹配的所有行。
您已经在外部查询中从
product
中进行选择,所以我真的怀疑您的意思是 correlated 子查询:
SELECT (StyleCode + ColorwaySAPID) as OptionID,
...,
(
SELECT [label]
FROM import.enumneckline e
WHERE e.Enumeration_Value = p.lclNeckLine2 -- correlation here
) as NeckLine,
...
FROM import.product p -- alias for the outer table