2014-03-07 79 views
1

我有下面的查詢,我試圖比較兩個表。我可以看到兩個表具有匹配的行,但下面的查詢不返回任何行。我已經按照類似的問題的例子,但我不能讓查詢工作 - 不知道我缺少什麼?我讀過關於使用聯合查詢來比較兩個表,那會更好嗎?SQL服務器內連接在多個列與條件

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

當你拿走WHERE子句時,你會得到任何數據嗎?如果你這樣做,你看到「H.DATEU」實際上是2014-03-06和「HL1.DATEU」= 2014-03-06的結果嗎?您應該包含您認爲應該通過選擇返回的行。 – DrCopyPaste

+0

嗨,感謝您的評論。請參閱我上面的編輯。我已經添加了數據。 – mHelpMe

回答

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 
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子句會發生什麼?您使用的日期格式是否正確?如果該字段的日期爲,那麼數據類型爲,我建議您使用顯式轉換,而不是依賴於隱式轉換。

+0

謝謝 - 有幾個錯字。現在我已經取出了where子句,但是在運行查詢時仍然沒有行被返回 – mHelpMe

+0

@mHelpMe即使錯字是固定的嗎? (我必須承認,這在我的第二個查詢中甚至被忽略了)。 – SQB

+0

是的,即使錯別字 - 讓我重新發布我的最新查詢 – mHelpMe