Страница 1 из 1

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

Добавлено: 2012-10-30 20:03:34
ErGnC=yR.u
Добрый день!
Такая ситуация: Есть две таблицы

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

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, тоже не канает. Можно видимо джойном с таблицей в которой выбор этой суммы идёт, но блять тоже как-то коряво выглядит.

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

Добавлено: 2012-10-30 20:38:11
PYO
Есть такое дело как HAVING.
А в таком виде надо вместо хх: BB.field3+BB.field4 > 10

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

Добавлено: 2012-10-30 23:19:42
Alex Keda

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

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

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

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

и БД написать неплохобы какая...

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

Добавлено: 2012-10-31 6:18:44
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
такое не уверен что проканает, в результате этого запроса же будет выбираться целый набор данный, его надо сджойнить с остальными.

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

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

Добавлено: 2012-11-01 18:14:24
Alex Keda
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
ну да... ораклы всех мастей и платформ - тоже стандартные.
как и постгре, интербазы-файрбёрды....

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

Добавлено: 2012-11-01 21:42:26
rayder
ну у меня, например, стандарт - постгрес...