Gestion des noms de colonnes ambigus dans les requêtes SQL
Lors de la récupération de données de plusieurs tables via des jointures, vous pouvez rencontrer un message d'erreur indiquant une colonne ambiguë nom. Cela se produit lorsque le même nom de colonne existe dans deux ou plusieurs des tables jointes, laissant l'interpréteur de requêtes incertain quant à la table à référencer.
Par exemple, dans la requête fournie, InvoiceLineItems et Invoices contiennent une colonne nommée ID de facture. Lors de la récupération de l'InvoiceID dans la requête, SQL Server ne sait plus à quelle table récupérer les données.
Pour résoudre cette ambiguïté, vous devez spécifier le nom de la table pour chaque colonne que vous référencez. Dans ce cas, vous pouvez mettre à jour la requête 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
En spécifiant Invoices.InvoiceID, vous indiquez explicitement à SQL Server que vous souhaitez récupérer la valeur InvoiceID de la table Invoices. Cela élimine l'ambiguïté et permet à la requête de s'exécuter correctement.
Vous pouvez également utiliser des alias de table pour attribuer à chaque table un identifiant unique. Par exemple, vous pouvez alias Invoices en tant que Inv et InvoiceLineItems en tant que ILI et mettre à jour la requête en conséquence :
SELECT VendorName, Inv.InvoiceID, InvoiceSequence, InvoiceLineItemAmount FROM Vendors AS V JOIN Invoices AS Inv ON (V.VendorID = Inv.VendorID) JOIN InvoiceLineItems AS ILI ON (Inv.InvoiceID = ILI.InvoiceID) WHERE Inv.InvoiceID IN (SELECT InvoiceSequence FROM ILI WHERE InvoiceSequence > 1) ORDER BY VendorName, Inv.InvoiceID, InvoiceSequence, InvoiceLineItemAmount
L'utilisation d'alias de table offre un autre moyen de résoudre l'ambiguïté du nom de colonne et de garantir que la requête renvoie les résultats corrects.
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!