Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
每隔一行选择mysql,不自动递增或表数据_Mysql - Fatal编程技术网

每隔一行选择mysql,不自动递增或表数据

每隔一行选择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 =

如何在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 = 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)