我想从以下两个表创建一个视图:
Entry:
entry_id
entry_date
entry_amount
user_id
Forecast:
forecast_id
forecast_date
forecast_amount
user_id
现在我希望有一个视图,它将每个条目与其预测(相同的user_id和相同的日期)相结合。这很好,但我对这些行有问题,这些行有预测而没有条目,反之亦然。
我还想在数据库中保留所有没有预测的条目。它们应在预测字段中显示为空值。对于没有条目的预测也一样。
答案 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