Maison > base de données > tutoriel mysql > Comment résoudre l'erreur de nom de colonne ambiguë de SQL dans les jointures ?

Comment résoudre l'erreur de nom de colonne ambiguë de SQL dans les jointures ?

DDD
Libérer: 2025-01-01 11:12:11
original
433 Les gens l'ont consulté

How to Resolve SQL's Ambiguous Column Name Error in Joins?

Erreur de nom de colonne ambiguë SQL : une explication détaillée

Lorsque vous travaillez avec des requêtes SQL qui impliquent la jointure de tables, vous pouvez rencontrer une erreur si vous avoir plusieurs colonnes portant le même nom dans les tables jointes. Cette erreur se produit car la base de données ne peut pas déterminer à quelle table appartient la référence de colonne. Dans cet article, nous allons approfondir ce problème et proposer une solution.

Considérez la requête suivante :

SELECT 
    VendorName, InvoiceID, InvoiceSequence, InvoiceLineItemAmount
FROM Vendors 
JOIN Invoices ON (Vendors.VendorID = Invoices.VendorID)
JOIN InvoiceLineItems ON (Invoices.InvoiceID = InvoiceLineItems.InvoiceID)
WHERE  
    Invoices.InvoiceID IN
        (SELECT InvoiceSequence 
         FROM InvoiceLineItems
         WHERE InvoiceSequence > 1)
ORDER BY 
    VendorName, InvoiceID, InvoiceSequence, InvoiceLineItemAmount
Copier après la connexion

Dans cette requête, l'erreur se produit en raison de la présence du "InvoiceID " dans les tables "Factures" et "InvoiceLineItems". La base de données ne peut pas discerner de quelle table vous avez l'intention de récupérer la valeur "InvoiceID".

Pour résoudre cette ambiguïté, vous devez spécifier le nom de la table lors du référencement de la colonne. Vous pouvez y parvenir en utilisant soit la notation par points, soit des alias. La notation par points consiste à préfixer le nom de la colonne avec le nom de la table, comme suit :

SELECT 
    VendorName, Invoices.InvoiceID, InvoiceSequence, InvoiceLineItemAmount
FROM Vendors 
JOIN Invoices ON (Vendors.VendorID = Invoices.VendorID)
JOIN InvoiceLineItems ON (Invoices.InvoiceID = InvoiceLineItems.InvoiceID)
WHERE  
    Invoices.InvoiceID IN
        (SELECT InvoiceSequence 
         FROM InvoiceLineItems
         WHERE InvoiceSequence > 1)
ORDER BY 
    VendorName, Invoices.InvoiceID, InvoiceSequence, InvoiceLineItemAmount
Copier après la connexion

Vous pouvez également utiliser des alias comme suit :

SELECT 
    v.VendorName, i.InvoiceID, il.InvoiceSequence, il.InvoiceLineItemAmount
FROM Vendors AS v  JOIN Invoices AS i ON (v.VendorID = i.VendorID)
JOIN InvoiceLineItems AS il ON (i.InvoiceID = il.InvoiceID)
WHERE  
    i.InvoiceID IN
        (SELECT InvoiceSequence 
         FROM InvoiceLineItems
         WHERE InvoiceSequence > 1)
ORDER BY 
    v.VendorName, i.InvoiceID, il.InvoiceSequence, il.InvoiceLineItemAmount
Copier après la connexion

En spécifiant les noms de table ou en utilisant des alias , vous indiquez explicitement les colonnes auxquelles vous faites référence, résolvant ainsi l'ambiguïté et permettant à la requête de s'exécuter correctement.

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