每隔一行选择mysql,不自动递增或表数据
如何在MySQL中选择偶数记录,而不使用任何列id或自动增量 现在,对于奇数行,我有以下内容:每隔一行选择mysql,不自动递增或表数据,mysql,Mysql,如何在MySQL中选择偶数记录,而不使用任何列id或自动增量 现在,对于奇数行,我有以下内容: SET @inc = 0; SELECT * FROM (SELECT *,@inc:=1-@inc autoinc FROM mytable) A WHERE autoinc = 1 ORDER BY id; 甚至: SET @inc = 0; SELECT * FROM (SELECT *,@inc:=1-@inc autoinc FROM mytable) A WHERE autoinc =
SET @inc = 0;
SELECT * FROM
(SELECT *,@inc:=1-@inc autoinc
FROM mytable) A
WHERE autoinc = 1 ORDER BY id;
甚至:
SET @inc = 0;
SELECT * FROM
(SELECT *,@inc:=1-@inc autoinc
FROM mytable) A
WHERE autoinc = 1 ORDER BY id;
这很有效。但是在大桌子上它太慢了。
请给我推荐其他的选择。也许你想找一个像这样的 试试这个
select * from Table1 where mod(id, 2) <> '1'
假设您使用的MySQL版本足够新,可以支持子查询——如果不是,您还在MySQL 3上做什么下面是一个示例,说明如何使用包含无意义内容的临时表:
mysql> create temporary table t (n text);
Query OK, 0 rows affected (0.00 sec)
mysql> insert into t (n) values ('a'), ('b'), ('c'), ('d'), ('e');
Query OK, 5 rows affected (0.00 sec)
Records: 5 Duplicates: 0 Warnings: 0
mysql> select * from t;
+------+
| n |
+------+
| a |
| b |
| c |
| d |
| e |
+------+
mysql> SET @i = 0; SELECT i, n FROM (SELECT @i := @i + 1 AS i, n FROM t) a WHERE MOD(a.i, 2) = 0;
Query OK, 0 rows affected (0.00 sec)
+------+------+
| i | n |
+------+------+
| 2 | b |
| 4 | d |
+------+------+
2 rows in set (0.00 sec)
mysql> SET @i = 0; SELECT i, n FROM (SELECT @i := @i + 1 AS i, n FROM t) a WHERE MOD(a.i, 2) = 1;
Query OK, 0 rows affected (0.00 sec)
+------+------+
| i | n |
+------+------+
| 1 | a |
| 3 | c |
| 5 | e |
+------+------+
2 rows in set (0.00 sec)
看到了吗?您将会话变量@i设置为零,然后在子查询中,对其执行相当于预增量的操作,为您提供一个索引列和数据行。然后,在外部查询中,您将根据@i mod 2是0(偶数行)还是1(奇数行)来选择行
为了便于说明,我在外部查询中选择了“I”列,但是您不需要为该技术的工作做同样的操作——或者,当然,如果您在外部查询中选择*,您可以忽略结果中的“I”列值。如果数据表中已有列“i”,只需在子查询中使用其他别名即可
这项技术推广得也很好;对于MODa.i,N=0,每第N行返回一次。这个问题没有显示任何研究成果。做家庭作业很重要。告诉我们你发现了什么,为什么它不能满足你的需要。这表明你花了时间来帮助自己,这使我们不必重复显而易见的答案,而且最重要的是,这有助于你得到更具体、更相关的答案。也是和@PolishPrince-Huh的副本。希望我在回答之前检查一下评论…这是一个重复,但我不能删除这个问题。完美答案:注意不要使用表中的任何数据或问题中的某些自动增量,并查看我的答案以获得满足给定要求的工作解决方案。
mysql> create temporary table t (n text);
Query OK, 0 rows affected (0.00 sec)
mysql> insert into t (n) values ('a'), ('b'), ('c'), ('d'), ('e');
Query OK, 5 rows affected (0.00 sec)
Records: 5 Duplicates: 0 Warnings: 0
mysql> select * from t;
+------+
| n |
+------+
| a |
| b |
| c |
| d |
| e |
+------+
mysql> SET @i = 0; SELECT i, n FROM (SELECT @i := @i + 1 AS i, n FROM t) a WHERE MOD(a.i, 2) = 0;
Query OK, 0 rows affected (0.00 sec)
+------+------+
| i | n |
+------+------+
| 2 | b |
| 4 | d |
+------+------+
2 rows in set (0.00 sec)
mysql> SET @i = 0; SELECT i, n FROM (SELECT @i := @i + 1 AS i, n FROM t) a WHERE MOD(a.i, 2) = 1;
Query OK, 0 rows affected (0.00 sec)
+------+------+
| i | n |
+------+------+
| 1 | a |
| 3 | c |
| 5 | e |
+------+------+
2 rows in set (0.00 sec)