MySQL синтаксис - PullRequest
       31

MySQL синтаксис

3 голосов
/ 13 мая 2009

В ответ на другой вопрос здесь о stackoverflow ( Как вы выбираете каждую n-ю строку из mysql ), кто-то предоставил этот ответ:

SELECT * FROM ( SELECT @row := @row +1 AS rownum, [column name]
FROM ( SELECT @row :=0) r, [table name] ) ranked WHERE rownum % [n] = 1 

Может ли кто-нибудь предоставить или указать мне дополнительную информацию об использовании синтаксиса здесь. Я не знаком с использованием: =?

(Я не могу попросить дополнительное объяснение в комментариях из-за баллов.)

Спасибо.

Ответы [ 3 ]

2 голосов
/ 13 мая 2009

a = b в MySQL сравнивает a с b и возвращает true, если они равны, или false в противном случае. @a := b, с другой стороны, устанавливает значение @a в b.

По сути, = - это оператор сравнения («равен»), а := - оператор присваивания («равен»).

РЕДАКТИРОВАТЬ: Я только что обнаружил, что вы можете использовать = в качестве оператора присваивания в SET операторах, так как в них нет таких вещей, как сравнения. В операторах SELECT вы должны использовать := для присваивания.

2 голосов
/ 13 мая 2009

С http://dev.mysql.com/doc/refman/5.0/en/user-variables.html:

"Для SET в качестве оператора присваивания можно использовать = или: =.

Вы также можете присвоить значение пользовательской переменной в инструкциях, отличных от SET. В этом случае оператор присваивания должен быть: =, а не =, потому что = обрабатывается как оператор сравнения в операторах не-SET:

mysql> SET @t1=0, @t2=0, @t3=0;
mysql> SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
+----------------------+------+------+------+
| @t1:=(@t2:=1)+@t3:=4 | @t1  | @t2  | @t3  |
+----------------------+------+------+------+
|                    5 |    5 |    1 |    4 |
+----------------------+------+------+------+

"

0 голосов
/ 13 мая 2009

Для меня это выглядит так же, как =.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...