2009-09-02 127 views
2

我想從下面兩個表創建一個視圖:查看與全外連接

Entry: 
entry_id 
entry_date 
entry_amount 
user_id 

Forecast: 
forecast_id 
forecast_date 
forecast_amount 
user_id 

現在我想有它結合了其預測(相同USER_ID和同一日期)每個條目的視圖。這很好,但我對那些有預測和沒有條目的行有問題,反之亦然。

我想在數據庫中仍然沒有預測的所有條目。他們應該在預測字段中顯示空值。對於沒有條目的預測也是如此。

+0

給出是的,全外部連接不支持在mysql中,直到日期檢查我的答案。 – 2009-09-02 08:18:26

回答

2

這(FULL OUTER JOIN)命令是not available on MySql你需要使用UNION來實現這個下面

SELECT E.*, F.* 
FROM Entry E 
LEFT JOIN Forecast F ON E.user_id = F.user_id AND E.entry_date = F.forecast_date 
UNION ALL 
SELECT E.*, F.* 
FROM Forecast F 
LEFT JOIN Entry E ON E.user_id = F.user_id AND E.entry_date = F.forecast_date 
+0

謝謝 - 有趣的是,mysql沒有完整的外部聯接 極好的工作 – Martin 2009-09-02 08:22:49

+0

使用聯合刪除重複項。在這種情況下可能沒有任何東西,但是在問題中沒有任何東西明確排除這一點。解決這個問題的方法是全部使用union,請參閱我的答案。 – Guffa 2009-09-02 09:28:44

+0

哦,是的,你是對的,糾正它。 – 2009-09-02 13:10:24

0

你有什麼試過?

一個完整的外連接會爲你做到這一點。您可以模擬一個帶有兩個外部聯接和UNION ALL:

select 
    e.entry_id, e.entry_date, e.entry_amount, e.user_id, 
    f.forecast_id, f.forecast_date, f.forecast_amount, f.user_id 
from 
    Entry e 
    left outer join Forecast f on f.user_id = e.user_id and f.forecast_date = e.entry_date 
union all 
select 
    e.entry_id, e.entry_date, e.entry_amount, e.user_id, 
    f.forecast_id, f.forecast_date, f.forecast_amount, f.user_id 
from 
    Entry e 
    right outer join Forecast f on f.user_id = e.user_id and f.forecast_date = e.entry_date 
where 
    e.entry_id is null 
+0

+1只需添加日期比較 – 2009-09-02 08:10:58

+0

我認爲這個命令在mysql中不可用。 – 2009-09-02 08:16:13

+0

SELECT e.entry_id, \t e.user_id, \t e.entry__date, \t e.entry_amount, \t f.user_id, \t f.forecast_period_end, \t f.forecast_id, \t f.forecast_amount 從入門e FULL OUTER JOIN Forecast f ON e.user_id = f.user_id AND e.entry_date = f.forecast_period_end 給我一個SQL錯誤。我不知道爲什麼...... – Martin 2009-09-02 08:16:33