PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

SQL - Créer une vue à partir de plusieurs tables

L'union n'est pas ce que vous voulez. Vous souhaitez utiliser des jointures pour créer des lignes uniques. Il est un peu difficile de savoir ce qui constitue une ligne unique dans vos tableaux et comment ils sont réellement liés les uns aux autres et il est également difficile de savoir si un tableau aura des lignes pour chaque pays chaque année. Mais je pense que cela fonctionnera :

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
);

La jointure gauche (externe) renverra les lignes de la première table même s'il n'y a pas de correspondance dans la seconde. J'ai écrit ceci en supposant que vous auriez une ligne pour chaque pays pour chaque année dans le tableau des revenus. Si vous ne le faites pas, les choses deviennent un peu poilues car MySQL n'a pas de support intégré pour les FULL OUTER JOINs la dernière fois que j'ai vérifié. Il existe des moyens de le simuler, et ils impliqueraient les syndicats. Cet article approfondit le sujet :http://www.xaprb.com/blog/2006/05/26/how-to-write-full-outer-join-in-mysql/