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
Libérer: 2025-01-13 21:50:49
original
303 Les gens l'ont consulté

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

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!

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