我在sql中练习子查询,突然间我跳进了一个我从未想过可能发生的不正常查询。 我的询问问题是....
写一个查询来显示澳元的平均汇率,其中汇率日期是2005年7月1日??
查询是......
USE AdventureWorks2012
SELECT AverageRate FROM Sales.CurrencyRate
WHERE ToCurrencyCode='AUD' AND CurrencyRateDate IN
(SELECT CurrencyRateDate FROM Sales.Currency
WHERE CurrencyRateDate='2005-07-01')
所以,我的问题是如何获得列名" CurrencyRateDate"在子查询中它实际上来自表" CurrencyRate" ??
我知道我的查询格式不正确。
如果我的头衔没有意义,我感到非常抱歉。如果你们可以提供更好的请更改它..
谢谢
答案 0 :(得分:1)
AND CurrencyRateDate IN
(SELECT CurrencyRateDate FROM Sales.Currency
WHERE CurrencyRateDate='2005-07-01')
此处的所有CurrencyRateDate
引用都指向外部查询中的列。
因此,对于外部查询中的每一行,您将获得一个仅包含该行CurrencyRateDate
的列表,对Sales.Currency
表中的每一行重复一次(如果{{该行的1}}为CurrencyRateDate
,否则列表为空。)
然后检查外部2005-07-01
值是否在该列表中。当且仅当它等于CurrencyRateDate
时(假设2005-07-01
中至少有一行)。
所以你的查询相当于:
Sales.Currency