从employees表中获取偶数编号的记录

时间:2017-02-01 05:49:07

标签: mysql sql database subquery

我通过link遇到了MySQL问题。看完下面的答案(也可以在链接中找到),我仍然没有得到它。有人可以为我解释一下这些步骤,尤其是子查询(SELECT @i := @i + 1 AS i, employee_id FROM employees)吗?提前致谢!

问题:

从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;

3 个答案:

答案 0 :(得分:2)

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

SELECT employee_id FROM employees
WHERE employee_id%2 = 0;

上述代码的作用是为每位员工设定仲裁编号。这是子查询的作用

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

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

答案 1 :(得分: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;

答案 2 :(得分:0)

对于表中的偶数行打印

SELECT * FROM Employee WHERE MOD (Employee_id,2)=0;

对于表中的打印奇数行

SELECT * FROM Employee WHERE MOD (Employee_id,2)<>0