Maison > base de données > tutoriel mysql > Comment résoudre l'erreur ORA-00918 d'Oracle : erreur de définition de colonne ambiguë dans les requêtes SELECT * ?

Comment résoudre l'erreur ORA-00918 d'Oracle : erreur de définition de colonne ambiguë dans les requêtes SELECT * ?

Mary-Kate Olsen
Libérer: 2025-01-13 21:26:47
original
157 Les gens l'ont consulté

How to Resolve Oracle's ORA-00918: Ambiguous Column Definition Error in SELECT * Queries?

*Oracle ORA-00918 : Définition de colonne ambiguë – Un problème de requête SELECT **

L'exécution d'une SELECT * requête sur plusieurs tables jointes dans Oracle peut conduire à la redoutable erreur ORA-00918 : "définition de colonne ambiguë". Cela se produit lorsque votre requête inclut des colonnes portant des noms identiques provenant de différentes tables. Oracle ne peut pas déterminer quelle colonne vous souhaitez récupérer.

Voici un exemple de requête qui déclenche souvent cette erreur :

<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

La racine du problème

Le SELECT * tente de récupérer toutes les colonnes, mais comme id existe dans plusieurs tables (coaches, people, users), Oracle ne sait pas quelle colonne id sélectionner.

La solution : spécification précise des colonnes

Pour corriger ORA-00918, évitez SELECT *. Au lieu de cela, répertoriez explicitement les colonnes dont vous avez besoin. Il existe deux manières principales d'y parvenir :

1. Sélection directe de colonnes

Spécifiez chaque colonne en utilisant son nom complet (table.column) :

<code class="language-sql">SELECT coaches.id,
       people.name,
       users.username,
       coaches.team
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

2. Utilisation des alias de colonnes

Attribuez des alias uniques aux colonnes portant le même nom à l'aide du mot-clé AS :

<code class="language-sql">SELECT coaches.id AS coaches_id,
       people.name AS person_name,
       users.username AS user_username,
       coaches.team AS coaches_team
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

En employant l'une ou l'autre méthode, vous fournissez à Oracle des instructions sans ambiguïté, résolvant l'erreur ORA-00918 et garantissant que votre requête s'exécute avec succès. N'oubliez pas de remplacer les exemples de noms de colonnes par vos noms de colonnes réels.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal