#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';
Я предполагаю, из каких таблиц поступают столбцы, поэтому полные имена могут быть неправильными (ваш вопрос не предоставляет эту информацию).