sql >> Database teknologi >  >> RDS >> PostgreSQL

Ret "FEJL:mangler FROM-klausulindtastning for tabel" i PostgreSQL, når du bruger UNION, EXCEPT eller INTERSECT

Hvis du får "FEJL:mangler FROM-klausulindtastning for tabel ” i PostgreSQL, når du bruger en operator såsom UNION , INTERSECT , eller EXCEPT , kan det skyldes, at du kvalificerer et kolonnenavn med dets tabelnavn.

For at rette dette skal du enten fjerne tabelnavnet eller bruge et kolonnealias.

Eksempel på fejl

Her er et eksempel på kode, der producerer fejlen:

(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY Teachers.TeacherName ASC;

Resultat:

ERROR:  missing FROM-clause entry for table "teachers"
LINE 4: ORDER BY Teachers.TeacherName ASC;

I dette tilfælde forsøgte jeg at sortere resultaterne efter TeacherName kolonne, men jeg kvalificerede den kolonne med tabelnavnet (jeg brugte Teachers.TeacherName for at henvise til kolonnenavnet).

Referencetabeller som denne virker ikke, når du bestiller resultaterne af UNION , EXCEPT , eller INTERSECT .

Løsning 1

En måde at løse dette problem på er at fjerne tabelnavnet fra ORDER BY klausul:

(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;

Løsning 2

En anden måde at løse det på er at bruge et alias for kolonnen:

(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY t ASC;

Med denne mulighed tildeler vi et alias til kolonnen og henviser derefter til det alias i ORDER BY klausul.


  1. Almindelig bruger med SYSBACKUP-privilegium

  2. Flere mysql INSERT-sætninger i én forespørgsel php

  3. Hvordan undslipper jeg reserverede ord, der bruges som kolonnenavne? MySQL/Opret tabel

  4. Hvordan definerer man en trigger ON COMMIT i Oracle?