2016-05-10 11 views
1

Können Sie mir mit den folgenden Syntaxfehlern helfenSyntaxfehler - postgresql

Spalt Referenz „id“ ist mehrdeutig ist der Fehler, den ich immer bin.

insert into table1 (id, name, type, version) 
select id, '<needs updating>' as name, 'external' as type, -1 as version 
from table2 
left outer join table1 
on table2.id = table1.id 
where table1.id is null 
group by table2.id, table1.name 


order by table2.id, table1.name 
+0

Was ist mit der Fehlermeldung unklar ist? –

Antwort

2

Ändern select id,-select table2.id, oder select table1.id,

0

Als Zusammenfassung der Antwort oben und warum es notwendig ist (Sie sollten Anonymous-SOS ist btw statt diese eine Antwort akzeptieren, da dies es ergänzt).

Wenn PostgreSQL die Abfrage analysiert, stellt es fest, dass die ID hier auf table1.id oder table2.id verweisen kann und so den Fehler auslöst. Während es möglich ist, zu bemerken, dass in diesem Fall die zwei Werte notwendigerweise gleich sind, ist es wahrscheinlich besser, den Fehler jetzt zu erhalten, als wenn Sie die Abfrage so modifizieren, dass die Ambiguität zurückkehrt.

Sie müssen also table1.id oder table2.id angeben und das Feld entsprechend qualifizieren.

0

table1 und table2 beide Tabellen haben den gleichen Spaltennamen "id". Wenn Sie die SELECT-Anweisung mit beiden Tabellen ausführen, wurde die Tabelle "ID" verwechselt. In diesem Fall tritt ein mehrdeutiger Fehler auf. Um dies zu überwinden besser Alias-Namen oder tabellenname.spaltenname zu verwenden (das heißt dem Tabellenspalte u wollen, dass tabellenname.spaltenname)