Pokud se vám zobrazuje „CHYBA:chybí záznam klauzule FROM pro tabulku ” v PostgreSQL při použití operátoru, jako je UNION
, INTERSECT
nebo EXCEPT
, může to být proto, že kvalifikujete název sloupce s názvem jeho tabulky.
Chcete-li tento problém vyřešit, odstraňte název tabulky nebo použijte alias sloupce.
Příklad chyby
Zde je příklad kódu, který způsobuje chybu:
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY Teachers.TeacherName ASC;
Výsledek:
ERROR: missing FROM-clause entry for table "teachers" LINE 4: ORDER BY Teachers.TeacherName ASC;
V tomto případě jsem se pokusil seřadit výsledky podle TeacherName
sloupec, ale kvalifikoval jsem tento sloupec názvem tabulky (použil jsem Teachers.TeacherName
odkaz na název sloupce).
Referenční tabulky, jako je tato, nefungují při řazení výsledků UNION
, EXCEPT
, nebo INTERSECT
.
Řešení 1
Jedním ze způsobů, jak tento problém vyřešit, je odstranit název tabulky z ORDER BY
klauzule:
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Řešení 2
Dalším způsobem, jak to opravit, je použít alias pro sloupec:
(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY t ASC;
Pomocí této možnosti přiřadíme alias ke sloupci a poté na tento alias odkazujeme v ORDER BY
doložka.