PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

SQL - Ansicht aus mehreren Tabellen erstellen

Union ist nicht das, was Sie wollen. Sie möchten Joins verwenden, um einzelne Zeilen zu erstellen. Es ist ein wenig unklar, was eine eindeutige Zeile in Ihren Tabellen ausmacht und wie sie wirklich miteinander in Beziehung stehen, und es ist auch unklar, ob eine Tabelle Zeilen für jedes Land in jedem Jahr haben wird. Aber ich denke, das wird funktionieren:

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

Der linke (äußere) Join gibt Zeilen aus der ersten Tabelle zurück, auch wenn es in der zweiten keine Übereinstimmungen gibt. Ich habe dies unter der Annahme geschrieben, dass Sie für jedes Land für jedes Jahr eine Zeile in der Einkommenstabelle haben würden. Wenn nicht, werden die Dinge etwas haarig, da MySQL keine eingebaute Unterstützung für FULL OUTER JOINs hat, die ich zuletzt überprüft habe. Es gibt Möglichkeiten, dies zu simulieren, und sie würden Gewerkschaften einbeziehen. Dieser Artikel geht etwas in die Tiefe zu diesem Thema:http://www.xaprb.com/blog/2006/05/26/how-to-write-full-outer-join-in-mysql/