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。谢谢