查看完全外部加入

时间:2009-09-02 08:06:25

标签: sql mysql

我想从以下两个表创建一个视图:

Entry:
entry_id
entry_date
entry_amount
user_id

Forecast:
forecast_id
forecast_date
forecast_amount
user_id

现在我希望有一个视图,它将每个条目与其预测(相同的user_id和相同的日期)相结合。这很好,但我对这些行有问题,这些行有预测而没有条目,反之亦然。

我还想在数据库中保留所有没有预测的条目。它们应在预测字段中显示为空值。对于没有条目的预测也一样。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

你有什么尝试?

完整的外部联接会为您做到这一点。您可以使用两个外部联接和一个联合模拟一个:

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