2012-04-03 147 views
0

我有兩個表一個是指數,另一個是價格結構下MySQL的左連接

table: index 
columns: trandate, indexcode 

table: price 
Columns: truncate, symbol, price 

我想知道丟失的價格。爲此,我發出查詢:

select i.trandate,i.indexcode,p.trandate,p.price 
    from index i 
    left join price p on i.trandate = p.trandate 
where p.symbol='ABC' and indexcode="New" 

上述查詢不顯示空日期,即使價格表中缺少各種價格。我理解的唯一理由是索引表沒有符號字段,這就是爲什麼......但根據理論,如果你想顯示一個表的所有行和只有另一個表的匹配值,然後使用左或右連接查詢...請任何人都可以幫忙?

+0

這是一個框架式不佳的問題。請在創建問題標題時具體說明。 – 2012-04-03 11:27:39

+0

indexcode =「New」應該是一個i.indexcode?錯字錯誤?並且是DATETIME類型的轉換還是僅DATE? – 2012-04-03 11:28:23

+0

你能張貼一些樣本數據和實際/預期結果嗎? – 2012-04-03 11:29:55

回答

1

如果你這樣做

where p.symbol='ABC' and indexcode="New" 

你只能得到符合該命中。所以他們都必須有一個'ABC'符號。現在我不確定爲什麼你期望你的NULL值存在,如果你這樣做,但我認爲你是這個意思?

where (p.symbol='ABC' OR p.symbol IS NULL) and indexcode="New" 
+0

我過去的結果需要和查詢生成所需的結果\t \t \t 日期\t INDEXCODE \t TRANDATE \t價格 29-MAR-92 \t新\t 29-MAR-92 \t 61.9 30-MAR-92 \t新\t空\t空 31-MAR-92 \t新\t 31-MAR-92 \t 61.9 當前查詢給出的結果\t \t \t 29-MAR-92 \t新\t 29-Mar-92 \t 61.9 31-Mar-92 \t新\t 31-Mar-92 \t 61.9 – user1019538 2012-04-03 12:29:22

+0

這有點難以理解嗎?你可以粘貼在你的問題,使用代碼標籤和所有? – Nanne 2012-04-03 12:36:05

1

你必須移動有關left join編表的left joinON部分條件:

select i.trandate,i.indexcode,p.trandate,p.price 
    from index i 
    left join price p on i.trandate = p.trandate and p.symbol='ABC' 
where indexcode="New" 
+0

我改變順序,根據你的建議放沒有運氣。我還添加了索引代碼的盈方。我粘貼所需的結果和生成的查詢。 – user1019538 2012-04-03 12:34:35

+0

您的結果顯示查詢實際可行。你必須尋找'i.trandate',而不是'p.trandate'(第三列)爲'null'。如果您只想查看缺失的價格,請將其添加到where子句的末尾:'AND p.trandate is null'。乾杯 – 2012-04-09 12:18:14