2017-02-01 33 views
0

我通过这个link发现了一个MySQL问题。阅读下面的答案(也可以在链接中找到),我仍然没有得到它。有人可以解释我的步骤,特别是子查询(SELECT @i := @i + 1 AS i, employee_id FROM employees)?提前致谢!从员工表中提取偶数编号的记录

问题:从员工表

即使抓取编号记录。

答案:

SET @i = 0; 

SELECT i, employee_id 

FROM (SELECT @i := @i + 1 AS i, employee_id FROM employees) a 

WHERE MOD(a.i, 2) = 0; 
+0

这会以不确定的方式提取'备用'记录,即数据集的一半。他们不是在任何有意义的意义上“偶数” - 尽管他们可能碰巧是! – Strawberry

+0

我猜这样的草率答案(以某种方式规范地表述)部分地解释了为什么该网站不鼓励作为本网站的资源。 – Strawberry

回答

2

如果您想获得偶数员工ID,这一切都是不必要的

SELECT employee_id FROM employees 
WHERE employee_id%2 = 0; 

上面的代码做什么是ASIGN arbitary号给每位员工。这就是子查询

(SELECT @i := @i + 1 AS i, employee_id FROM employees) 

从零开始,使用一个计数器,每一行增加一个计数器。但正如@strawberry在评论中指出的那样,这里确实没有任何目的或意义。更好地使用employee_id(除非你有一个奇怪的情况,大多数员工有奇数或偶数而不是平均分配)

+0

这很有道理! –

+0

很高兴有帮助。与您的项目一切顺利。 – e4c5

1
(SELECT @i := @i + 1 AS i, employee_id FROM employees) 

此递增i变量的每行中取出的值(可以是任何行,因为没有在此提供顺序)。所以,i的价值没有任何意义。

当你说偶数行时,必须有一些编号顺序。我在这里假设employee_id的升序。

在一个查询中使用的用户变量:

SELECT 
    * 
FROM 
    (SELECT 
     e.*, @rn:=IF(@rn IS NULL, 1, @rn + 1) rn 
    FROM 
     employees e 
    ORDER BY employee_id) t 
WHERE 
    rn % 2 = 0; 
+0

我不认为这回答了问题 – Strawberry

+0

非常感谢!我刚刚看到更新,但它有很大帮助! –