Как решить ошибку неоднозначности 1052 в MySQL SELECT?

#mysql #sql #select

#mysql #sql #выберите

Вопрос:

Я делаю MySQL SELECT:

 SELECT name, description, brand, Providers.name, Categories.name, sellingPrice, quantity
FROM Products 
INNER JOIN Providers ON Products.idProvider = Providers.id
INNER JOIN Categories ON Products.idCategory = Categories.id
WHERE category = 'tools';
  

но я становлюсь этой ошибкой:

 Error Code: 1052. Column 'name' in field list is ambiguous
  

даже если я указал ‘Table.column’ (Providers.name , Categories.name ).

Пожалуйста, помогите??

Комментарии:

1. вы выбираете его первым, не указывая имя таблицы

2. Досадно, что mysql не определяет, являются ли 2 из 3 имен квалифицированными, тогда неквалифицированное должно быть из оставшейся таблицы..

3. @P.Salmon Я думаю , ты действительно хорошо уловил суть !! Я не определил все 3 колонки, я думал, что достаточно всего 2. СПАСИБО

Ответ №1:

Вы пытались удалить поле name в начале? Попробуйте этот код

 SELECT description, brand, Providers.name, Categories.name, sellingPrice, quantity
FROM Products 
INNER JOIN Providers ON Products.idProvider = Providers.id
INNER JOIN Categories ON Products.idCategory = Categories.id
WHERE category = 'tools';
  

Аналогичным образом предоставьте правильную таблицу.Сопоставление столбцов при выборе.
Если у вас есть поле name в таблице Products, включите Products.name в select

Всякий раз, когда вы объединяете таблицы, вы можете найти одинаковые имена столбцов в нескольких таблицах. Механизм SQL не знает, что выбрать.Итак, чтобы различать, вам нужно указать правильные сопоставления. Вы также можете указать простые псевдонимы вместо полных имен таблиц.

Ответ №2:

Простое правило: уточняйте все имена столбцов при написании запроса. Всегда.

Если вы даете таблицам разумные псевдонимы, это легко. Итак, ваш запрос должен выглядеть примерно так:

 SELECT p.name, p.description, p.brand, pr.name, c.name, p.sellingPrice, p.quantity
FROM Products p JOIN
     Providers pr
     ON p.idProvider = pr.id JOIN
     Categories c
     ON p.idCategory = c.id
WHERE c.category = 'tools';
  

Я предполагаю, из каких таблиц поступают столбцы, поэтому полные имена могут быть неправильными (ваш вопрос не предоставляет эту информацию).