用户定义的变量不适用于where子句

时间:2015-07-23 16:43:42

标签: mysql sql

SET @a:=0

以下查询有效

SELECT *,@a:=@a+1 FROM article WHERE @a<=3

此查询返回3行 但是当查询包含LEFT JOIN时它不起作用,返回所有行。

SELECT a.*,@a:=@a+1 FROM article a
LEFT JOIN comments c ON c.aid=a.id
WHERE @a<=3

我不明白为什么此查询会返回所有行

1 个答案:

答案 0 :(得分:1)

LIMIT 3将更清楚地表达你想要做的事情(看起来像)。也就是说,我已经知道边界滥用会话变量,甚至我倾向于在WHERE条款中看到它们;通常不宜与他们交叉条款。

....虽然这对你有用:

SELECT a.*,@a:=@a+1 AS theAValue
FROM article a
LEFT JOIN comments c ON c.aid=a.id
HAVING theAValue <=3
;

在计算完所有结果字段后,始终处理HAVING。