Проблема с SQL-запросом

48
2

Я пытаюсь выбрать из двух таблиц, используя объединение, а затем группировать по типу. Как избежать "активного"?

Он бросает эту ошибку в окне Query (студия управления):

ошибка

Msg 209, Level 16, State 1, Line 6 
Ambiguous column name 'active'.
Msg 207, Level 16, State 1, Line 7
Invalid column name 'zone'.

запрос

select 
vendor.name,type_zone.type as zone
from dbo.vendor join dbo.type_zone
on fkType_zoneID = pkType_ZoneID
where active = 1
GROUP BY zone

спросил(а) 2011-07-28T22:09:00+04:00 8 лет, 7 месяцев назад
1
Решение
48

Столбец active в обеих таблицах. Вам нужно определить, какую active колонку вы хотите использовать. Например

WHERE vendor.active = 1

Вы не можете использовать псевдоним столбца в предложении GROUP BY. Изменить zone на type_zone.type

ответил(а) 2011-07-28T22:13:00+04:00 8 лет, 7 месяцев назад
49

Квалифицируйте активный столбец с помощью имени табуляции:

vendor.active или type_zone.active

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

ответил(а) 2011-07-28T22:12:00+04:00 8 лет, 7 месяцев назад
49

Ваши ошибки означают, что имя "активного" столбца существует в обеих таблицах. Вы должны указать его как type_zone.active или vendor.active в своих тестах, чтобы определить, какая таблица должна иметь свой столбец этого имени.

Предложение GROUP BY ошибочно, потому что в вашем предложении SELECT нет агрегированной функции.

ответил(а) 2011-07-28T22:11:00+04:00 8 лет, 7 месяцев назад
35

Это зависит от того, на какой активной таблице находится. Если это у поставщика, тогда должно работать следующее:

select 
vendor.name,type_zone.type as zone
from dbo.vendor inner join dbo.type_zone
on fkType_zoneID = pkType_ZoneID
where dbo.vendor.active = 1
GROUP BY type_zone.type

С этим легче справиться, если вы используете свои таблицы, как показано ниже:

select 
v.name,t.type as zone
from dbo.vendor v inner join dbo.type_zone t
on v.fkType_zoneID = t.pkType_ZoneID
where v.active = 1
GROUP BY t.type

ответил(а) 2011-07-28T22:11:00+04:00 8 лет, 7 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема