Mysql 从employees表中获取偶数记录

Mysql 从employees表中获取偶数记录,mysql,sql,database,subquery,Mysql,Sql,Database,Subquery,通过这个我遇到了一个MySQL问题。看完下面的答案也可以在链接中找到,我还是没有得到。有人能给我解释一下步骤吗,特别是子查询SELECT@i:=@i+1 AS i,employee_id FROM employees?提前谢谢 问题: 从employees表中获取偶数记录 答复: 这会增加获取的每一行的i变量的值,该行可以是任何一行,因为这里没有提供顺序。所以,我的价值将毫无意义 当你说偶数行时,必须有一定的编号顺序。我假设员工id按升序排列 在单个查询中使用用户变量: SELECT

通过这个我遇到了一个MySQL问题。看完下面的答案也可以在链接中找到,我还是没有得到。有人能给我解释一下步骤吗,特别是子查询SELECT@i:=@i+1 AS i,employee_id FROM employees?提前谢谢

问题:

从employees表中获取偶数记录

答复:

这会增加获取的每一行的i变量的值,该行可以是任何一行,因为这里没有提供顺序。所以,我的价值将毫无意义

当你说偶数行时,必须有一定的编号顺序。我假设员工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;

如果您试图获取偶数编号的员工ID,那么所有这些都是不必要的

SELECT employee_id FROM employees
WHERE employee_id%2 = 0;
上面的代码所做的是向每个员工分配任意编号。子查询就是这样做的

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

从零开始,使用每行递增1的计数器。但正如@草莓在评论中指出的,这真的没有任何目的或意义。最好使用employee_id,当然,除非您遇到一种极端情况,即大多数员工都有一个奇数或偶数,而不是一个相等的分布,用于从表中打印偶数行

SELECT * FROM Employee WHERE MOD (Employee_id,2)=0;
SELECT * FROM Employee WHERE MOD (Employee_id,2)<>0
用于打印表中的奇数行

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

这将以不确定的方式获取“备用”记录,即数据集的一半。在任何意义上,它们都不是“偶数”——尽管它们可能碰巧是!我猜像这样草率的答案以某种方式被呈现为规范,这部分解释了为什么该网站不被鼓励作为该网站的资源。我不认为这回答了这个问题。非常感谢!我刚刚看到了更新,但它帮助了很多!这是有道理的!很高兴能帮忙。祝你的项目一切顺利。