Maison >base de données >tutoriel mysql >Pourquoi ma requête SELECT * génère-t-elle une erreur ORA-00918 : erreur de définition de colonne ambiguë ?

Pourquoi ma requête SELECT * génère-t-elle une erreur ORA-00918 : erreur de définition de colonne ambiguë ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-13 21:50:49347parcourir

Why Does My SELECT * Query Result in an ORA-00918: Ambiguous Column Definition Error?

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>
Il y a un problème avec la clause

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!

Déclaration:
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