Как одним запросом выбрать 1 строку и посчитать количество доступных?

dandandan

Мой дом здесь!
Регистрация
7 Авг 2008
Сообщения
1.036
Реакции
293
Есть база. например:
id nazvanie dostupno
1 red 0
2 blue 1
3 green 1
4 yellow 1

Надо выбрать сроку с id = 4 и посчитать количество строк с параметром dostupno=1 . Можно ли это сделать одним запросом в бд без подзапросов ?

Сейчас делаю так:

SELECT nazvanie, (SELECT count(id) FROM .... WHERE dostupno='1') as kolvo FROM .... WHERE id='4'
 
Код:
select nazvanie from t where id=4 union select count(1) from t where dostupno=1
 
Тоже получается подзапрос через объединение UNION. Видимо нет такого велосипеда :(
 
Тоже получается подзапрос через объединение UNION. Видимо нет такого велосипеда :(
Через UNION у получается 2 запроса, в которых данные ищутся по индексу (если вы правильно спроектировали структуру БД).
Ваш запрос менее производительный потому что подзапрос
SELECT count(id) FROM .... WHERE dostupno='1'
будет выполняться с каждой строчкой результата запроса
SELECT nazvanie, ... FROM .... WHERE id='4'

Попробуйте EXPLAIN

Кстати, подзапросы в mysql до 5й версии не работают, а UNION работает!
 
придумал ещё вариант
Код:
SELECT MAX(CASE WHEN id=4 THEN nazvanie ELSE '' END) AS A1,
SUM(CASE WHEN dostupno='1' THEN 1 ELSE 0 END) AS A2
FROM `Table`
 
Назад
Сверху