Неоднозначная ошибка имени столбца: подсчет SQL, объединение, группировка по

У меня есть две таблицы, как показано ниже, в одной таблице указано количество доступных единиц (запасов), я пытаюсь вернуть количество запасов каждой категории продуктов и присоединиться к ней со вторичной таблицей, чтобы просмотреть описание и цену и т. д.

Когда я запускаю приведенный ниже запрос, я получаю «Неоднозначное имя столбца« productID »».

Что я делаю не так?

SQL-запрос:

select productID, count (stock)as available_count
from product_units
join  product_type ON product_type.description = product_units.productID
group by productID  

Это возвращает ошибку:

Неоднозначное имя столбца productID.

Таблица product_type

productID  description  price 
101        tent         20.00
102        xltent       50.00

Таблица product_units

unitID  productID stock
1       101       1
2       101       1
3       101       1
4       102       1

Оригинальный SQL-запрос для подсчета запасов, который работает:

select productID, count (stock)as available_count
from  product_units
group by productID

Я использую SQL Server 2008 R2 с Coldfusion


person Claudia Sasi    schedule 16.05.2013    source источник
comment
Что означает неоднозначное имя столбца?   -  person Leigh    schedule 17.05.2013
comment
Я все еще получаю ту же ошибку.   -  person Claudia Sasi    schedule 17.05.2013
comment
Вы переписали свой запрос, как предлагает Гордон Линофф, Калуди Саси?   -  person Agi Hammerthief    schedule 17.05.2013
comment
У тебя есть какие-нибудь результаты, Калуди? Воспроизведя ваши таблицы, я получаю: | 101, палатка, 20 | 102, xltent, 50 |   -  person Agi Hammerthief    schedule 17.05.2013
comment
Да спасибо. Я получаю productId и количество запасов, а не описание или цену. Я думаю, мне нужно добавить select * к product_type. Я играю с кодом, чтобы попытаться заставить его работать. Ура для интернета! :-)   -  person Claudia Sasi    schedule 17.05.2013


Ответы (1)


Я думаю, что ваша ошибка более вероятна: «Неоднозначное имя столбца« productID »». И я предполагаю, что соединение должно быть и в этом поле:

select product_units.productID, count (stock)as available_count
from product_units
join  product_type ON product_type.productID = product_units.productID
group by product_units.productID 

Чтобы выбрать все строки из таблицы product_type, используйте right outer join:

select product_units.productID, count (stock)as available_count
from product_units
right outer join  product_type ON product_type.productID = product_units.productID
group by product_units.productID 

Чтобы выбрать всю информацию из таблицы типов продуктов, сначала выполните агрегацию, а затем присоединитесь:

select pt.*, pu.available_count
from (select productId, count(stock) as available_count
      from product_units
      group by productId
     ) pu join
     product_type pt
     on pt.productID = pu.productId;
person Gordon Linoff    schedule 16.05.2013
comment
Вы правы, извините, я перепутал, когда печатал вопрос. Я исправил вопрос. Спасибо. - person Claudia Sasi; 17.05.2013
comment
Если бы я хотел выбрать все с помощью вышеуказанного запроса, как лучше всего это сделать? - person Claudia Sasi; 17.05.2013
comment
Извиняюсь, я имел в виду, хочу ли я выбрать все из таблицы product_type с помощью вышеуказанного запроса. - person Claudia Sasi; 17.05.2013