Résolution d'Oracle ORA-00918 : erreur de définition de colonne ambiguë
Il est frustrant de rencontrer l'erreur ORA-00918 lors de l'utilisation de l'instruction SELECT *
. Cette erreur se produit lorsqu'une colonne portant le même nom apparaît plusieurs fois dans le jeu de résultats et qu'Oracle ne peut pas déterminer quelle colonne récupérer.
L'instruction SQL suivante :
<code class="language-sql">SELECT * FROM (SELECT DISTINCT(coaches.id), people.*, users.*, coaches.* FROM "COACHES" INNER JOIN people ON people.id = coaches.person_id INNER JOIN users ON coaches.person_id = users.person_id LEFT OUTER JOIN organizations_users ON organizations_users.user_id = users.id ) WHERE rownum <= 25</code>
SELECT *
car il y a plusieurs colonnes nommées ID dans la sous-requête :
COACHES.ID
PEOPLE.ID
USERS.ID
Pour résoudre cette ambiguïté, la requête doit sélectionner explicitement les colonnes nommées. Il est recommandé d'utiliser des alias de colonnes pour améliorer la clarté et éviter les problèmes lors de l'ajout ou du renommage de colonnes à l'avenir. Par exemple :
<code class="language-sql">SELECT COALESCE(COACHES.ID, PEOPLE.ID, USERS.ID) AS ID, people.*, users.*, coaches.*, organizations_users.* FROM (SELECT DISTINCT(coaches.id), people.*, users.*, coaches.* FROM "COACHES" INNER JOIN people ON people.id = coaches.person_id INNER JOIN users ON coaches.person_id = users.person_id LEFT OUTER JOIN organizations_users ON organizations_users.user_id = users.id ) WHERE rownum <= 25</code>
Cet ajustement garantit qu'il n'y a qu'une seule instance de la colonne ID dans l'ensemble de résultats, résolvant ainsi l'erreur ORA-00918 et garantissant l'intégrité des données. COALESCE
La fonction est utilisée pour gérer la situation où des valeurs NULL peuvent exister et sélectionner la première valeur d'ID non NULL. Cependant, une meilleure solution consiste à spécifier explicitement toutes les colonnes requises et à éviter d'utiliser le caractère générique *
.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!