Как стать автором
Обновить

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

вы хотя-бы укажите сервер баз данных, который используете
Mysql наверное ?
я MS SQL, вы можете решить для того, который используете сами.
select @Available = 1 where (select count(*) from Numbers) <= @MaxAmount and not exists (select top 1 1 from Numbers where ID = @ID)

СУБД принял за SQL Server. Задача настолько легка, что не танет ни на какие звездочки.
НЛО прилетело и опубликовало эту надпись здесь
Вы правы, с вложенными запросами все действительно тривиально. Зубры SQL до появления оператора CASE ваяли нечто вроде этого:

SELECT @Available = SIGN(1 + SIGN(COUNT(*) - @MaxAmount)))*(1 - ABS(SIGN(SUM(1 - SIGN(ABS(ID - @ID))))))
FROM Numbers
отец :) только перемудрил вроде :)
SELECT
    @Availability = 1
FROM
    #TestCount
HAVING
    COUNT(ID) < @MaxAmount
AND SUM(ABS(SIGN(ID — @ID))) = COUNT(ID)
НЛО прилетело и опубликовало эту надпись здесь
sum(id=@ID) недопустимая конструкция, т.к. boolean в SQL нельзя ни к чему привести. то же самое с умножением.
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории