SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 01.12.2013 14:54:21

maximus_wand
Участник
Откуда: Мурманск
Зарегистрирован: 16.09.2012
Сообщений: 13

Обращение к полям текущего запроса

Здравствуйте,
Иногда приходится в запросе использовать вычисления, подзапросы, а потом нужно получить ещё какое-то поле на основании вычисленных данных

Пример,


SELECT name, id_cnt,
(Select n FROM tabl WHERE tab1.id_cnt=idcnt) as field3
FROM tab1


В данном случае поле "field3", вычисляемое, а иногда нужно значение поля Field3 так, как оно есть и ещё вычислить дополнительное поле field4, в котором будет значение Field3. Получается, что нужно городить длинный огород.
Получается огромный код, Например,

SELECT name, id_cnt,
(Select n FROM tabl WHERE tab1.id_cnt=idcnt) as field3,
if((Select n FROM tabl WHERE tab1.id_cnt=idcnt) =1,'privet',(Select n FROM tabl WHERE tab1.id_cnt=idcnt)) as field4
FROM tab1


Можно ли обращаться к результатам текущей строки, к тем полям, которые только что рассчитались?

Например,  if(Field3=1,'privet',Field3) as Field4

Отредактированно maximus_wand (01.12.2013 14:57:06)


Полярный медведь, это прямоугольный медведь после преобразования координат

Неактивен

 

#2 01.12.2013 15:10:46

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5847

Re: Обращение к полям текущего запроса

SELECT name, id_cnt,
@q:=(Select n FROM tabl WHERE tab1.id_cnt=idcnt) as field3,
if(@q =1,'privet',@q) as field4
FROM tab1;


только не помню гарантируется ли, что разбор списка полей всегда идет слева направо (проверте в доке)

Неактивен

 

#3 02.12.2013 20:40:49

maximus_wand
Участник
Откуда: Мурманск
Зарегистрирован: 16.09.2012
Сообщений: 13

Re: Обращение к полям текущего запроса

Спасибо!


Полярный медведь, это прямоугольный медведь после преобразования координат

Неактивен

 

#4 03.12.2013 23:18:11

maximus_wand
Участник
Откуда: Мурманск
Зарегистрирован: 16.09.2012
Сообщений: 13

Re: Обращение к полям текущего запроса

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

Например,


SELECT @m:=(field1+2), Field2, @s:=sum((Field3)+5)
FROM test
GROUP BY Field2
 


В данном случае @m нормально работает, а @s не заносится, и хранит значение, установленное в неё ранее, перед выполнением запроса. Т.е. в расчётах её использовать нельзя.
В то время как сам результат sum((Field3)+5) в запросе есть.

Скажите пож-ста, это особенность MySQL или у меня ошибка.


Полярный медведь, это прямоугольный медведь после преобразования координат

Неактивен

 

#5 04.12.2013 00:31:25

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5847

Re: Обращение к полям текущего запроса

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson