SQL连接在双重条件下

时间:2013-01-30 16:09:33

标签: sql join

想象一下,我们有2个表AB,具有相同的结构,如下所示: CurrencySpotExposureFixing

我们希望加入这两个表,以便查询,例如Fixing = '2013-01-03'并拥有主要货币列表(A中的货币与货币中的货币之间并不总是对应B)。

  • 1条件:A.Fixing = B.Fixing
  • 2条件:A.Currency = B.Currency(还返回货币值不匹配)

这是一个例子:我们在请求的那一天有A表中的美元货币,但我们没有在表B上。我们当天想要的是一个连接表,其中有一行带有USD然后是表A中的曝光值,后跟零(因为ARS不在表B中,因此它没有美元的曝光)

我们如何编写查询?

下表和结果:

A

Currency  Spot     Exposure      Fixing
--------  -------  ------------  ----------
AUD       1.3023   -504,561.00   30/01/2013
CHF       1.2378   268,243.00    30/01/2013
GBP       0.8597   2,204.00      30/01/2013
JPY       123.635  -552.00       30/01/2013
USD       1.3572   5,242.00      30/01/2013
AUD       1.300    -574,561.00   29/01/2013
CHF       1.235    545,152.00    29/01/2013
GBP       0.858    1,155,212.00  29/01/2013
JPY       123.388  -45,115.00    29/01/2013
USD       1.354    22,468.00     29/01/2013

B

Currency  Spot     Exposure       Fixing
--------  -------  -------------  ----------
AUD       1.3023   256,442.00     30/01/2013
CHF       1.2378   -4,456,421.00  30/01/2013
GBP       0.8597   15,246.00      30/01/2013
JPY       123.635  1,243,146.00   30/01/2013
AUD       1.300    41,246.00      29/01/2013
CHF       1.235    243.00         29/01/2013
GBP       0.858    54,564.00      29/01/2013
JPY       123.388  140.00         29/01/2013

结果:

Currency  A.Exposure   B.Exposure     Fixing
--------  -----------  -------------  ----------
AUD       -504,561.00  256,442.00     30/01/2013
CHF       268,243.00   -4,456,421.00  30/01/2013
GBP       2,204.00     15,246.00      30/01/2013
JPY       -552.00      1,243,146.00   30/01/2013
USD       5,242.00     -              30/01/2013

1 个答案:

答案 0 :(得分:0)

EDITED:左外连接允许您获取表a中的所有内容并匹配表b中的值,并且在表b中没有数据时具有NULL。使用ISNULL()函数通过检查NULL值为您提供更清晰的结果,如果找到NULL值,则用您选择的其他值替换它。

select
  a.Currency
, a.Spot
, a.Exposure as a_Exposure
, ISNULL(b.Exposure, 0) as b_Exposure
, a.Fixing
from a
left outer join b 
   on b.Currency = a.Currency
   and b.Fixing = a.Fixing
where a.Fixing = '2013-01-30';

我更改了查询以反映Clockwork-Muse的建议。您需要添加要返回数据的任何列。