Почему я не могу применить критерии к подзапросу? - PullRequest
0 голосов
/ 15 января 2010

Я пытаюсь сделать следующее:

select Store.Id, (select COUNT(*) from StoreProduct
where StoreProduct.Store_id = Store.Id) as _count from Store where _count > 3

SQL Server говорит, что он недопустим, поскольку имя столбца _count недопустимо. Почему это недействительно, если я это объявляю?

Ответы [ 6 ]

4 голосов
/ 15 января 2010
select Id as StoreId, count(*) as ProductCount
from StoreProduct
group by Id
having count(*) > 3

Другой способ

select S.Id, count(SP.ProductId) as ProductCount
from Store S
left join StoreProduct SP on (SP.Store_id = S.Id)
group by S.Id
having COUNT(SP.ProductId) > 3

Предполагается, что уникальный столбец в вашей таблице StoreProduct называется ProductId

3 голосов
/ 15 января 2010

Недопустимо в предложении WHERE из-за порядка вычисления в SQL.Предложение WHERE является вторым в списке, поэтому могут видеть только элементы, присутствующие в предложении FROM (которое оценивается первым). Эта старая статья содержит разбивку порядка оценки.Я уверен, что есть более новый.

1 голос
/ 15 января 2010

'as' используется для логического переименования поля в запросе. Вы не можете использовать его для переименования таблицы, что и возвращает ваш подзапрос, хотя мы знаем по контексту, что таблица, возвращаемая подзапросом, будет содержать только одну строку.

Надеюсь, это поможет.

0 голосов
/ 15 января 2010

Почему бы не попробовать это:

select a.StoreId,count(*) as TotProducts
from Store a
join StoreProduct b on b.storeId=a.storeID
group by a.storeID
having count(*) > 3

Похоже, это то, что вы пытаетесь достичь?

0 голосов
/ 15 января 2010

Почему бы вам не попробовать это?

select Store_id as Id, COUNT(1) as acount
from StoreProduct
group by Store_id
having count(1) > 3
0 голосов
/ 15 января 2010

Попробуйте использовать имя, начинающееся с буквы вместо подчеркивания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...