Помогите пожалуйста с запросом

MySQL/PostgreSQL/SQLite/Oracle/M$SQL/....

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
ErGnC=yR.u
проходил мимо
Сообщения: 9
Зарегистрирован: 2012-10-30 15:47:52

Помогите пожалуйста с запросом

Непрочитанное сообщение ErGnC=yR.u » 2012-10-30 20:03:34

Добрый день!
Такая ситуация: Есть две таблицы

Код: Выделить всё

AA (
id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
field1 INT UNSIGNED,
field2 INT UNSIGNED
)

BB (
id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
aaID INT UNSIGNED NOT NULL,
field3 INT UNSIGNED,
field4 INT UNSIGNED,
FOREIGN KEY (aaID) REFERENCES AA.aaID ON DELETE CASCADE ON UPDATE CASCADE
) 
Хочу выбрать такой набор данных с условием:

Код: Выделить всё

SELECT AA.id, AA.field1, (BB.field3+BB.field4) AS xx FROM AA LEFT JOIN BB ON AA.id=BB.aaID WHERE xx>10
Смысл запроса думаю понятен. Так вот такой запрос не канает, говорит Unknown field 'xx' in where clause. В where можно конечно вставить вместо xx само выражение (BB.filed3+BB.field4)>10, но на самом деле в запросе эта сумма из большего числа слагаемых и используется несколько раз. Просто некрасивый громадный запрос получается. Подскажите можно ли как то победить?
Пробовал (BB.field3+BB.field4) AS BB.xx и соответственно в where использовать BB.xx, тоже не канает. Можно видимо джойном с таблицей в которой выбор этой суммы идёт, но блять тоже как-то коряво выглядит.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

PYO
сержант
Сообщения: 187
Зарегистрирован: 2011-08-18 12:46:45

Re: Помогите пожалуйста с запросом

Непрочитанное сообщение PYO » 2012-10-30 20:38:11

Есть такое дело как HAVING.
А в таком виде надо вместо хх: BB.field3+BB.field4 > 10

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Помогите пожалуйста с запросом

Непрочитанное сообщение Alex Keda » 2012-10-30 23:19:42

Код: Выделить всё

(BB.field3+BB.field4)
а типа

Код: Выделить всё

(Select (field3 +field4) FROM BB WHERE ....) AS xx
не проканает?

и БД написать неплохобы какая...
Убей их всех! Бог потом рассортирует...

ErGnC=yR.u
проходил мимо
Сообщения: 9
Зарегистрирован: 2012-10-30 15:47:52

Re: Помогите пожалуйста с запросом

Непрочитанное сообщение ErGnC=yR.u » 2012-10-31 6:18:44

Спасибо за ответы, в итоге сделал через третий джойн:

Код: Выделить всё

SELECT AA.id, BB.field3,xx.resField FROM AA LEFT JOIN BB ON BB.aaID=AA.id LEFT JOIN (SELECT BB.aaID,BB.(field3+BB.field4) AS resField FROM BB) AS xx ON xx.aaID=AA.id
Alex Keda писал(а):(Select (field3 +field4) FROM BB WHERE ....) AS xx
такое не уверен что проканает, в результате этого запроса же будет выбираться целый набор данный, его надо сджойнить с остальными.

А БД извините что не уточнил, просто стандартная MySQL 5.5

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Помогите пожалуйста с запросом

Непрочитанное сообщение Alex Keda » 2012-11-01 18:14:24

ErGnC=yR.u писал(а):Спасибо за ответы, в итоге сделал через третий джойн:

Код: Выделить всё

SELECT AA.id, BB.field3,xx.resField FROM AA LEFT JOIN BB ON BB.aaID=AA.id LEFT JOIN (SELECT BB.aaID,BB.(field3+BB.field4) AS resField FROM BB) AS xx ON xx.aaID=AA.id
Alex Keda писал(а):(Select (field3 +field4) FROM BB WHERE ....) AS xx
такое не уверен что проканает, в результате этого запроса же будет выбираться целый набор данный, его надо сджойнить с остальными./quote]
условие напишите чтобы не выбиралась куча
ErGnC=yR.u писал(а): А БД извините что не уточнил, просто стандартная MySQL 5.5
ну да... ораклы всех мастей и платформ - тоже стандартные.
как и постгре, интербазы-файрбёрды....
Убей их всех! Бог потом рассортирует...

rayder
лейтенант
Сообщения: 661
Зарегистрирован: 2008-12-18 16:29:43
Откуда: Ukraine/Kiev
Контактная информация:

Re: Помогите пожалуйста с запросом

Непрочитанное сообщение rayder » 2012-11-01 21:42:26

ну у меня, например, стандарт - постгрес...
Человеку свойственно ошибаться, но для нечеловеческих ляпов нужен компьютер.