L'unione non è quello che vuoi. Vuoi usare i join per creare righe singole. Non è chiaro cosa costituisca una riga univoca nelle tabelle e in che modo si relazionano realmente tra loro e non è nemmeno chiaro se una tabella avrà righe per ogni paese in ogni anno. Ma penso che funzionerà:
CREATE VIEW V AS (
SELECT i.country,i.year,p.pop,f.food,i.income FROM
INCOME i
LEFT JOIN
POP p
ON
i.country=p.country
LEFT JOIN
Food f
ON
i.country=f.country
WHERE
i.year=p.year
AND
i.year=f.year
);
Il join sinistro (esterno) restituirà righe dalla prima tabella anche se non ci sono corrispondenze nella seconda. Ho scritto questo supponendo che avresti una riga per ogni paese per ogni anno nella tabella dei redditi. Se non le cose si complicano perché MySQL non ha il supporto integrato per FULL OUTER JOIN l'ultima volta che ho controllato. Ci sono modi per simularlo e coinvolgerebbero i sindacati. Questo articolo approfondisce l'argomento:http://www.xaprb.com/blog/2006/05/26/how-to-write-full-outer-join-in-mysql/