Sql 使用EXISTS返回的值不正确

Sql 使用EXISTS返回的值不正确,sql,sql-server,tsql,Sql,Sql Server,Tsql,我试图使用子查询和EXISTS运算符返回一个最小值fiscalyear,并在productid上分组。无论出于何种原因,我从一组财政年度中获得了一个任意值。子查询返回最小值fiscalyear,但外部查询不会在更新时提取它。有什么想法吗 UPDATE#Temp SET SALES_YEAR = sa.fiscalyear FROM sales sa JOIN products p ON p.id = sa.productid JOIN #Temp t ON p.id = t.pr

我试图使用子查询和
EXISTS
运算符返回一个最小值
fiscalyear
,并在
productid
上分组。无论出于何种原因,我从一组财政年度中获得了一个任意值。子查询返回最小值
fiscalyear
,但外部查询不会在
更新时提取它。有什么想法吗

UPDATE#Temp
SET SALES_YEAR = sa.fiscalyear
FROM sales    sa
JOIN products p  ON p.id = sa.productid
JOIN #Temp    t  ON p.id = t.productid
WHERE exists ( select MIN(sa.fiscalyear),
                        sa.productid
               FROM sales    sa 
               JOIN products p  ON p.id = sa.productid
               JOIN #Temp    t  ON p.id = t.productid
               GROUP BY sa.productid
             )
请尝试此查询

UPDATE  #Temp
SET     SALES_YEAR = A.fiscalyear
FROM  #Temp t 
JOIN (
    select  MIN(sa.fiscalyear),
            sa.productid
    FROM    sales sa
    JOIN    products p ON p.id = sa.productid
    JOIN    #Temp t ON p.id = t.productid
    GROUP BY sa.productid
) A ON T.PRODUCTID=A.PRODUCTID
您不需要连接的外部存在。此外,我假设您使用的是SQL Server

实际上,我认为你根本不希望
存在。只需像这样使用
=

UPDATE t
   SET SALES_YEAR = sa.fiscalyear 
FROM #Temp t
WHERE t.product_id = (Select TOP 1 sa.productid
                      FROM sales sa JOIN
                           products p
                           ON p.id = sa.productid
                      ORDER BY sa.fiscalyear
                     )

看起来您正在使用SQL Server。这应该可以帮助您:

UPDATE #Temp SET SALES_YEAR = x.fiscalyear
FROM #Temp t
join ( select product_id      = sa.productid ,
              fiscal_year = MIN( sa.fiscalyear )
       FROM sales    sa 
       JOIN products p  ON p.id = sa.productid
       JOIN #Temp    t  ON p.id = t.productid
       GROUP BY sa.productid
     ) x

您的
EXISTS
没有连接回父查询,因为您正在使用表别名,因此无论外部查询中的值如何,它都会为所有记录返回true或false。您希望
EXISTS
告诉您什么?您的where-EXISTS子查询与外部查询无关。我会更改您的表别名,然后确保在“outerquery x=innerquery y”时执行where检查。不要在主查询和exists查询中使用相同的别名。将其中一个“sa”别名更改为其他别名。关于EXISTS谓词使用的说明就是我想要的。对于我期望的结果,此处未正确使用EXISTS。谢谢