[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Конструкция запроса
maximka787
Мужики, подскажите пожалуйста. уже не первый раз не могу сделать то что хочу. Вот есть запрос в запросе.
SELECT
поле1,
поле2,
(
SELECT SUM(поле) FROM .....) AS `CNT`
FROM
TAB
WHERE
`CNT` != '0'
почему такая конструкция не работает? пишет:
Unknown column 'CNT' in 'where clause'

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

_____________
..Работает - не трогай!
Placido
Выборка в подзапросе идет из той же таблицы (TAB)? И весь запрос можете показать?
maximka787
Placido
запрос большой, я его сократил. подзапрос считает данные из другой таблицы

_____________
..Работает - не трогай!
Лена
Если запрос большой, приведите хотя бы полностью подзапрос.
Таблицы как-то связаны между собой?
Сам подзапрос какие-то данные возвращает? Проверяли?

Варианты решений, набросала приблизительно, вы же полностью запрос не показали:

SET @data:= (SELECT SUM(поле) FROM .....);

SELECT
поле1,
поле2,
@data AS `CNT`
FROM
TAB
WHERE
`CNT` IS NOT NULL

SELECT

поле1,
поле2,
@data IS NOT NULL
FROM

TAB

SELECT
поле1,
поле2,
(
SELECT SUM(поле) FROM .....) IS NOT NULL
FROM

TAB




Вообще-то странный запрос и может работать некорректно. К двум выбираемым полям из одной таблицы вы в каждой строчке лепите какую-то сумму. Допустим, подзапрос SELECT SUM вернет несколько строк, по какому критерию эти строки будут поочередно лепиться к двум первым полям? Мне кажется, эта сумма к каждой строке будет лепиться случайным образом.
maximka787
Лена
Спасибо а такой ответ)

Вот мой запрос
SELECT
`id_car`,
`name`,
(
SELECT SUM(`id_car`) FROM TAB2 ) AS `CNT`
FROM
TAB1

дает

1 | Audi | 1
2 | Bmw | 11
3 | Лада | 0

я просто хочу чтобы "Лада" не отображалась))))) тк у нее 3-е поле (CNT) 0

_____________
..Работает - не трогай!
Placido
Ну вот, теперь вопрос задан более-менее понятно.
SELECT
`t1`.`id_car`,
`t1`.`name`,
SUM(`t2`.`id_car`) AS `CNT`
FROM
`TAB1` `t1` INNER JOIN `TAB2` `t2`
ON `t1`.`id_car` = `t2`.`id_car`
GROUP BY `t1`.`id_car`
maximka787
Placido
ок спасибо. разберу)

_____________
..Работает - не трогай!
maximka787
Вот кстати еще пример, типовой.

SELECT
`price`,
`price_old`,
(
ABS((`price`) - (`price_old`))) AS `raznica`
FROM
`product`
WHERE
`raznica` != '0'
не работает Unknown column 'raznica' in 'where clause'

SELECT
`price`,
`price_old`,
(
ABS((`price`) - (`price_old`))) AS `raznica`
FROM
`product`
WHERE
(ABS((`price`) - (`price_old`))) != '0'
работает

_____________
..Работает - не трогай!
Placido
Так и есть. Первый вариант не будет работать. Псевдонимы полей можно использовать только в части GROUP BY, ORDER BY или HAVING. См.
http://dev.mysql.com/doc/refman/5.0/en/pro...with-alias.html
Цитата
Standard SQL disallows references to column aliases in a WHERE clause.
This restriction is imposed because when the WHERE clause is evaluated,
the column value may not yet have been determined.
maximka787
Placido
эт верно. запрос приходится писать большего размера. это конечно минус.

_____________
..Работает - не трогай!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.