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
我不明白为什么此查询会返回所有行
答案 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。