我通过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;
答案 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