promocionado objeto nombre columna campos ambiguos ambiguo ambiguedad ambigua sql

sql - objeto - en where clause es ambigua



Error de consulta con nombre de columna ambiguo en SQL (6)

Recibo un error de nombre de columna ambiguo con esta consulta (InvoiceID). No puedo entender por qué. Todos parecen estar unidos correctamente, ¿por qué el estudio de administración no sabe mostrar VendorID? Cualquier ayuda sería muy apreciada.

Consulta:

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


Creo que solo tienes ambigüedad en InvoiceID. Otros campos parecen distintos. Así que prueba esto

Acabo de reemplazar InvoiceID con Invoices.InvoiceID

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

Puede usar tablename.columnnae para todas las columnas (en la selección, dónde, agrupar por y ordenar por) sin usar ningún alias. Sin embargo, puedes usar un alias guiado por otras respuestas.


Debido a que está uniendo dos tablas, Invoices e InvoiceLineItems que contienen InvoiceID. cambie a Facturas.InvoiceID para hacerlo correcto.


Lo más probable es que ambas tablas tengan una columna con el mismo nombre. Haga un alias de cada tabla y llame a cada columna con el alias de la tabla.


Tiene una columna InvoiceID en la tabla de Invoices y también en la tabla InvoiceLineItems . No hay forma de que el motor de ejecución de consultas sepa cuál desea que se devuelva.

Agregar un alias de tabla ayudará:

SELECT V.VendorName, I.InvoiceID, IL.InvoiceSequence, IL.InvoiceLineItemAmount FROM Vendors V JOIN Invoices I ON (...) JOIN InvoiceLineItems IL ON (...) WHERE ... ORDER BY V.VendorName, I.InvoiceID, IL.InvoiceSequence, IL.InvoiceLineItemAmount


es porque algunos de los campos (específicamente InvoiceID en la tabla de facturas y en InvoiceLineItems ) están presentes en ambas tablas. La forma de responder una pregunta es agregar un ALIAS en ella.

SELECT a.VendorName, Invoices.InvoiceID, .. -- or use full tableName FROM Vendors a -- This is an `ALIAS` of table 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


si se une a 2 o más tablas y tienen nombres similares para sus columnas, el servidor SQL quiere que califique las columnas a las que pertenecen.

SELECT ev.[ID] ,[Description] FROM [Events] as ev LEFT JOIN [Units] as un ON ev.UnitID = un.UnitId

Si las tablas de Eventos y Unidades tienen el mismo nombre de columna (ID), el servidor SQL quiere que use alias.