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.