The 1st query sql will converted to:
SELECT name,(@num)
FROM test WHERE 1
In select clause, the (@num : @num + 1)
return 1, so is mean the last query sql equal to:
SELECT name,(@num)
FROM test WHERE 1 <= 1
?
If yes, why the 2nd query only return first record?
If no, what is (@num := @num + 1)
in WHERE
clause?
Why @num
in 3rd query is 4
?
CREATE TABLE test (
id int(1),
name varchar(10)
);
INSERT INTO test (id, name) VALUES (1, 'a'), (2, 'b'), (3, 'c'), (4, 'd');
SET @num := 0;
SELECT name, @num FROM test WHERE (@num := 1) <= 1;
-- return all records.
SET @num := 0;
SELECT name, @num FROM test WHERE (@num := @num + 1) <= 1;
-- return first record.
SET @num := 0;
SELECT name, @num FROM test WHERE (@num := @num + 1) <= 1 ORDER BY name;
-- return 1 record, name = a, @num = 4