Affichage d'erreur dans PostgreSQL
J'ai une grande requête dans une base de données PostgreSQL.
La Requête est quelque chose comme ceci:
SELECT * FROM table1, table2, ... WHERE table1.id = table2.id...
Lorsque j'exécute cette requête comme une requête sql, il retourne la ligne.
Mais quand j'essaie d'utiliser la même requête pour créer une vue, il renvoie une erreur:
"erreur: la colonne "id" est spécifié plus d'une fois."
(J'utilise pgAdminIII lors de l'exécution de requêtes.)
J'imagine cela se produit parce que le jeu de résultats à plus d'une colonne nommée "id". Est-il d'une certaine manière pour résoudre ce problème, sans avoir à écrire tous les noms de colonnes dans la requête?
OriginalL'auteur eflles | 2008-10-16
Vous devez vous connecter pour publier un commentaire.
Qui se produit à cause d'un point de vue, deux id nommé colonnes, l'une de table1 et l'un de table2, en raison de l'sélectionnez *.
Vous devez spécifier l'id que vous voulez dans la vue.
La requête fonctionne, car cela peut avoir également nommé colonnes...
OriginalL'auteur Vinko Vrsalovic
Si seulement les colonnes de jointure sont en double (c'est à dire avoir les mêmes noms), alors vous pouvez vous en sortir avec l'évolution de:
:
OriginalL'auteur
Si vous êtes arrivé ici parce que vous tentez d'utiliser une fonction comme
to_date
et l'obtention de la "définie plus d'une fois" erreur, notez que vous devez utiliser un alias de colonne pour les fonctions, par exemple:OriginalL'auteur Ben Wilson
Aucun moyen intégré dans la langue de le résoudre (et franchement, * est une mauvaise pratique en général, car il peut causer des vices cachés à l'origine de la table des schémas de changement - vous pouvez le faire table1.*, table2.acolumn, tabl2.bcolumn si vous voulez tous d'une table et de manière sélective à partir d'un autre), mais si PostgreSQL supporte INFORMATION_SCHEMA, vous pouvez faire quelque chose comme:
Et coller les résultats dans d'économiser beaucoup de saisie. Vous devrez manuellement alias de colonnes qui ont le même nom, bien sûr. Vous pouvez aussi code-gen noms uniques si vous voulez (mais je n'en ai pas):
Il ya aussi pas de l'aide de [] pour citer les identificateurs. Et pas de CHAR() fonction. Et aucune instruction PRINT.
OriginalL'auteur Cade Roux