Postgres würde nicht geben Ihnen einen Fehler für doppelte Ausgabespaltennamen, aber einige Clients tun dies. (Doppelte Namen sind auch nicht sehr nützlich.)
Verwenden Sie in jedem Fall den USING
-Klausel als Join-Bedingung, um die beiden Join-Spalten zu einer zu falten:
SELECT *
FROM tbl_a a
LEFT JOIN tbl_b b USING (id);
Während Sie derselben Tabelle beitreten (Self-Join), gibt es mehr doppelte Spaltennamen. Die Abfrage würde zunächst kaum Sinn machen. Das beginnt für Andere Sinn zu machen Tische. Wie Sie in Ihrer Frage zu Beginn angegeben haben:I have two tables ...
Um alle doppelten Spaltennamen zu vermeiden, müssen Sie diese im SELECT
auflisten -Klausel explizit - möglicherweise Spaltenaliase ausgeben, um beide Instanzen mit unterschiedlichen Namen zu erhalten.
Oder Sie können einen NATURAL
verwenden join - wenn das zu Ihrem ungeklärten Anwendungsfall passt:
SELECT *
FROM tbl_a a
NATURAL LEFT JOIN tbl_b b;
Dies verbindet alle Spalten, die denselben Namen haben, und faltet diese automatisch - genau das gleiche wie das Auflisten aller gemeinsamen Spaltennamen in einem USING
Klausel. Regeln für mögliche NULL-Werte müssen beachtet werden ...