Maison > base de données > tutoriel mysql > Comment résoudre « ORA-00918 : colonne définie de manière ambiguë » dans les requêtes SELECT * ?

Comment résoudre « ORA-00918 : colonne définie de manière ambiguë » dans les requêtes SELECT * ?

DDD
Libérer: 2025-01-13 21:15:47
original
477 Les gens l'ont consulté

How to Resolve

*Dépannage « ORA-00918 : colonne définie de manière ambiguë » dans SELECT Requêtes**

L'erreur « ORA-00918 : colonne définie de manière ambiguë » survient généralement lors de l'exécution de SELECT * requêtes sur plusieurs tables jointes contenant des colonnes portant des noms identiques. Le moteur de base de données Oracle ne peut pas déterminer quelle colonne vous souhaitez récupérer lorsque plusieurs tables partagent un nom de colonne.

Exemple illustratif et solution

Considérez cette requête SQL :

<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>
Copier après la connexion

Cette requête génère l'erreur car plusieurs tables ( coaches, people, users) contiennent une colonne nommée "id".

Pour corriger cela, évitez d'utiliser SELECT *. Au lieu de cela, spécifiez explicitement les colonnes dont vous avez besoin :

Méthode 1 : Sélection directe de colonnes

Cette méthode sélectionne directement les colonnes souhaitées par leurs noms complets (table.column) :

<code class="language-sql">SELECT coaches.id,
       people.name,
       users.username,
       coaches.title
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>
Copier après la connexion

Méthode 2 : Utiliser des alias de colonnes

Cette approche attribue des alias uniques aux colonnes avec des noms en double. Cela rend les colonnes sélectionnées sans ambiguïté :

<code class="language-sql">SELECT coaches.id AS coach_id,
       people.name AS person_name,
       users.username AS user_username,
       coaches.title AS coach_title
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>
Copier après la connexion

En utilisant l'une ou l'autre de ces méthodes, l'ambiguïté est supprimée et la requête s'exécutera avec succès. Préférez toujours la sélection explicite des colonnes à SELECT * dans les requêtes impliquant des jointures pour éviter cette erreur courante et améliorer la lisibilité et la maintenabilité des requêtes.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal