我有下面的查询,我试图比较两个表。我可以看到这两个表确实有匹配的行,但下面的查询不会返回任何行。我已经按照类似问题的示例进行了操作,但我无法使查询工作 - 不确定我缺少什么?我确实读过关于使用union查询来比较两个表,那会更好吗?
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'
修改
请查看返回的数据。我已经改变了基金和ID列,但列是字符串。所以我想让我的查询做的是告诉我哪里的行不完全相同。例如,表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
最新查询尝试
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
)
答案 0 :(得分:1)
两个观察结果(评论时间太长)。
首先,你不是指你的第三次加入
INNER JOIN HOLDINGS_LIVE HL3 ON H.CURR = HL3.CURR
此外,您现在正在加入同一个表格(HOLDINGS_LIVE
)三次。你有没有打算加入三个条件?
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'
最后,如果删除where子句会发生什么?您使用的日期格式是否正确?如果该字段的日期为数据类型,我建议您使用显式转换,而不是依赖隐式转换。
答案 1 :(得分:0)
你可以使用除了:
SELECT H.[FUND_CD], H.[SEDOLCHK], H.[CURR]FROM HOLDINGS H
except
SELECT H.[FUND_CD], H1.[SEDOLCHK], H.[CURR]FROM HOLDINGS_LIVE H