Я всегда слышал, что они использовались в противоположном смысле:
&
является ссылочным оператором - он дает ссылку (указатель) на какой-либо объект *
- это оператор разыменования - он принимает ссылку (указатель) и возвращает вам упомянутый объект; Я думаю, что у вас двусмысленность только в InvoiceID. Другие поля кажутся разными. Итак, попробуйте This
Я просто заменю InvoiceID на 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
Вы можете использовать tablename.columnnae для всех столбцов (в выборе, где, по группам и по порядку) без используя любой псевдоним. Однако вы можете использовать псевдоним, руководствуясь другими ответами
, если вы присоединяетесь к двум или более таблицам, и у них есть похожие имена для своих столбцов, сервер sql хочет, чтобы вы квалифицировали столбцы, к которым они принадлежат.
SELECT ev.[ID]
,[Description]
FROM [Events] as ev
LEFT JOIN [Units] as un ON ev.UnitID = un.UnitId
, если таблицы Events и Units имеют одинаковое имя столбца (ID ) SQL-сервер хочет, чтобы вы использовали псевдонимы.
Скорее всего, обе таблицы имеют столбец с тем же именем. Псевдоним каждой таблицы и вызовите каждый столбец с псевдонимом таблицы.
У вас есть столбец InvoiceID
в таблице Invoices
, а также в таблице InvoiceLineItems
. Механизм выполнения запроса не знает, какой из них вы хотите вернуть.
Добавление псевдонима таблицы поможет:
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
это потому, что некоторые из полей (в частности InvoiceID в таблице Invoices и в InvoiceLineItems ) присутствуют на обеих таблицах. Способ ответа на вопрос состоит в том, чтобы добавить к нему ALIAS
.
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
I want a little guidance from you please
.. По какой причине этот вопрос получил так много голосов? Спросить, потому что я буду следовать за ним, задавая вопрос в следующий раз.
– Sami
30 September 2012 в 18:02
Поскольку вы соединяете две таблицы Invoices и InvoiceLineItems, которые содержат InvoiceID. измените на Invoices.InvoiceID, чтобы сделать его правильным.