Я толстый? MySQL: «Не уникальная таблица / псевдоним» в LEFT JOIN - PullRequest
5 голосов
/ 12 марта 2012

У меня есть следующий оператор SQL, который возвращает « Не уникальная таблица / псевдоним ».Я вполне уверен, что здесь просто отсутствует что-то очевидное, возможно, недостаточно конкретное при ссылке на StockID, поскольку это общее имя поля для Stock и SuppliersStock.Первичный ключ в Stock, Внешний ключ в SuppliersStock

SELECT Stock.BuyingPrice, SuppliersStock.StockID, SuppliersStock.Quantity
FROM Stock
LEFT JOIN Stock on Stock.StockID = SuppliersStock.StockID 
WHERE Stock.StockID = <some-integer />

Таблица Stock содержит конкретную информацию о запасах, Suppliers содержит информацию о поставщиках, а SuppliersStock содержит информационные заказы на новые акции.с ссылками на внешние ключи Stock и Suppliers.

Я хочу вернуть BuyingPrice (из Stock), StockID, Quantity (из SuppliersStock)поля, чтобы я мог составить список затрат на заказ на новые акции.

Отказ от ответственности: я знаю, еще один вопрос по SQL присоединяется.Не делай мне больно!Я гуглил, я искал, но я немного озадачен, и я честно пытался найти похожий вопрос, чтобы узнать больше о том, что я могу сделать, чтобы решить это сам, но придумали козыри.Пожалуйста, помогите?

Ответы [ 4 ]

9 голосов
/ 12 марта 2012

Ваши 'from' и 'left join' относятся к одной и той же таблице 'Stock'.Замените один из них на «Поставщик»

7 голосов
/ 12 марта 2012

Похоже, вы пропускаете псевдоним SuppliersStock, или это другая таблица:

/* If SuppliersStock is a different table */
SELECT Stock.BuyingPrice, SuppliersStock.StockID, SuppliersStock.Quantity
FROM Stock
LEFT JOIN SuppliersStock on Stock.StockID = SuppliersStock.StockID 
WHERE Stock.StockID = <some-integer />

/* If SuppliersStock is the same table, needing an alias */
SELECT Stock.BuyingPrice, SuppliersStock.StockID, SuppliersStock.Quantity
FROM Stock
LEFT JOIN Stock AS SuppliersStock on Stock.StockID = SuppliersStock.StockID 
WHERE Stock.StockID = <some-integer />
0 голосов
/ 12 марта 2012

вы присоединяетесь к акции на себя, что означает, что запрос не знает, на какую акцию вы ссылаетесь.Если это то, что вам нужно, создайте псевдоним для объединенной таблицы: JOIN Stock AS SuppliersStock

0 голосов
/ 12 марта 2012

Проблема в том, что вы присоединяетесь к Stock с Stock вместо SuppliersStock, поэтому, когда вы говорите Stock.StockID, MySQL не знает, на какой из двух вы ссылаетесь.

Полагаю, вы хотели это сделать:

SELECT Stock.BuyingPrice, SuppliersStock.StockID, SuppliersStock.Quantity
FROM Stock
LEFT JOIN SuppliersStock on Stock.StockID = SuppliersStock.StockID 
WHERE Stock.StockID = <some-integer />
...