Sql 错误号:512。错误信息:子查询返回超过 1 个值

问题描述 投票:0回答:1

我试图在 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 表加载选择值

sql sql-server subquery
1个回答
0
投票

可能问题出在返回

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
© www.soinside.com 2019 - 2024. All rights reserved.