1
的第一查询的SQL将转换为:MySQL的分配在用户定义的变量where子句
SELECT name,(@num)
FROM test WHERE 1
在选择的子句,(@num : @num + 1)
返回1,所以是意味着上次查询SQL等于:
SELECT name,(@num)
FROM test WHERE 1 <= 1
?
如果是,为什么第二个查询只返回第一条记录?
如果否,WHERE
子句中的(@num := @num + 1)
是什么?
为什么@num
在第三个查询中是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
你能解释一下更新后的最后一个查询吗? – consatan
同样的解释(你的上一个查询)适用于更新的最后一个查询。由于结果集只包含一行,'ORDER BY name'不起作用。 – 1000111
对不起,我想问,为什么'@ num'结果是'4' – consatan