[英]SQL server inner join on multiple columns with where condition
I have the query below where I am try to compare two tables. 我在下面的查询中尝试比较两个表。 I can see the two tables do have matching rows but the query below does not return any rows. 我可以看到两个表确实有匹配的行,但是下面的查询没有返回任何行。 I have followed the examples from similar questions but I cannot get the query to work - not sure what I am missing? 我遵循了类似问题的示例,但是我无法使查询正常工作-不确定我缺少什么吗? I did read about using the a union query to compare two tables, would that be better? 我确实读过有关使用联合查询比较两个表的信息,这样会更好吗?
SELECT H.[FUND_CD], H.[SEDOLCHK], H.[CURR]
FROM
HOLDINGS H
INNER JOIN
HOLDINGS_LIVE HL1 ON H.FUND_CD = HL1.FUND_CD
INNER JOIN
HOLDINGS_LIVE HL2 ON H.SEDOLCHK = HL2.SEDOLCHK
INNER JOIN
HOLDINGS_LIVE HL3 ON H.SEDOLCHK = HL3.CURR
WHERE
H.DATEU = '2014-03-06' AND HL1.DATEU = '2014-03-06'
EDIT 编辑
Please see the data the return should be returning. 请查看退货应返回的数据。 I have changed the fund & ID columns, however the columns are strings. 我已经更改了资金和ID列,但是这些列是字符串。 So what I would like my query to do is show me where any rows are not exactly the same. 因此,我希望查询执行的操作是向我显示任何行都不完全相同的位置。 For example the second row in Table B has a nominal which is different to Table A. The prices in table B are also different to column A. 例如,表B中的第二行具有与表A不同的名义价格。表B中的价格也与列A不同。
Table A
Fund ID Nominal Currency Price Date Stamp
ABC 12345 34102 GBP 1257 06-03-2014 00:00:00
ABC 45678 14884 EUR 13.085 06-03-2014 00:00:00
ABC 32564 2404 EUR 65.97 06-03-2014 00:00:00
ABC 95874 13515 CHF 87 06-03-2014 00:00:00
ABC 96325 803201 GBP 247.3 06-03-2014 00:00:00
ABC 15648 39442 DKK 256.7 06-03-2014 00:00:00
DEF 78451 1761 USD 372.16 06-03-2014 00:00:00
DEF 48884 22936 USD 13.99 06-03-2014 00:00:00
DEF 33215 2288 USD 41.1 06-03-2014 00:00:00
DEF 68745 801 CAD 86.16 06-03-2014 00:00:00
Table B
Fund ID Nominal Currency Price Date Stamp
ABC 12345 34102 GBP 12.57 06-03-2014 00:00:00
ABC 45678 14800 EUR 0.13085 06-03-2014 00:00:00
ABC 32564 2404 EUR 0.6597 06-03-2014 00:00:00
ABC 95874 13515 CHF 0.87 06-03-2014 00:00:00
ABC 96325 803201 GBP 2.473 06-03-2014 00:00:00
ABC 15648 39442 DKK 2.567 06-03-2014 00:00:00
DEF 78451 1761 USD 3.7216 06-03-2014 00:00:00
DEF 48884 22936 USD 0.1399 06-03-2014 00:00:00
DEF 33215 2288 USD 0.411 06-03-2014 00:00:00
DEF 68745 801 CAD 0.8616 06-03-2014 00:00:00
Latest query attempt 最新查询尝试
SELECT H.[FUND_CD], H.[SEDOLCHK], H.[CURR]
FROM
HOLDINGS H
INNER JOIN
HOLDINGS_LIVE HL
ON
(
H.FUND_CD = HL.FUND_CD
AND H.SEDOLCHK = HL.SEDOLCHK
AND H.CURR = HL.CURR
)
Two observations (too long for a comment). 两种观察(对于评论来说太长了)。
First off, don't you mean your third join to be 首先,你不是说你的第三次加入
INNER JOIN HOLDINGS_LIVE HL3 ON H.CURR = HL3.CURR
Also, you're now joining the same table ( HOLDINGS_LIVE
) thrice . 另外,您现在要加入三次相同的表( HOLDINGS_LIVE
)。 Could you possibly have meant to join it on three conditions? 您是否可以在三个条件下加入它?
SELECT H.[FUND_CD], H.[SEDOLCHK], H.[CURR]
FROM HOLDINGS H
INNER JOIN HOLDINGS_LIVE HL
ON ( H.FUND_CD = HL.FUND_CD
AND H.SEDOLCHK = HL.SEDOLCHK
AND H.CURR = HL.CURR
)
WHERE H.DATEU = '2014-03-06' AND HL.DATEU = '2014-03-06'
Lastly, what happens if you drop the where-clause? 最后,如果删除子句会怎样? Is the date format you use correct? 您使用的日期格式正确吗? If the field is of a date datatype , I advise you to use explicit conversion instead of relying on implicit conversion. 如果该字段是日期数据类型 ,则建议您使用显式转换,而不要依赖隐式转换。
you can use except: 您可以使用以下除外:
SELECT H.[FUND_CD], H.[SEDOLCHK], H.[CURR]FROM HOLDINGS H
except
SELECT H.[FUND_CD], H1.[SEDOLCHK], H.[CURR]FROM HOLDINGS_LIVE H
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.