嗨我有一个包含这些元素的表
id name
1 luke
2 johnny
3 perry
4 jenny
5 mark
我必须做一个第一个元素和持续2的查询 我这个例子
1 luke
4 jenny
5 mark
我该怎么办?
感谢
答案 0 :(得分:3)
我认为你不能用一个查询来做到这一点:我会说你必须使用两个查询:
一,获得第一个结果:
select *
from your_table
order by id asc
limit 1
另外一个是得到最后两个结果 - 在相反方向排序并获得前两个结果将会有效:
select *
from your_table
order by id desc
limit 2
之后,您可以只发送一个查询,而不是从编程语言向SQL服务器发出两个请求,而是使用UNION来获取两者的结果:
(select * from your_table order by id asc limit 1)
UNION
(select * from your_table order by id desc limit 2)
但是,考虑一下......不确定这实际上是否可行,在每个子查询中都有一个带有order by和limit的UNION ......
编辑:我做了测试,似乎有可能:
以下是两个独立执行的查询:
mysql> select id, title from post order by id asc limit 1;
+----+--------------+
| id | title |
+----+--------------+
| 1 | Premier post |
+----+--------------+
1 row in set (0,00 sec)
mysql> select id, title from post order by id desc limit 2;
+----+-------------------------+
| id | title |
+----+-------------------------+
| 7 | Septième post |
| 6 | Sixième post (draft=7) |
+----+-------------------------+
2 rows in set (0,00 sec)
以下是UNION的样子:
mysql> (select id, title from post order by id asc limit 1) UNION (select id, title from post order by id desc limit 2);
+----+-------------------------+
| id | title |
+----+-------------------------+
| 1 | Premier post |
| 7 | Septième post |
| 6 | Sixième post (draft=7) |
+----+-------------------------+
3 rows in set (0,03 sec)
但请注意,3个结果行的顺序定义不太明确......
并且,引用MySQL 5.1的以下手册页:12.2.8.3. UNION Syntax:
将ORDER BY或LIMIT应用于 个别SELECT,放置子句 在括起来的括号内 SELECT:
(SELECT a FROM t1 WHERE a=10 AND B=1 ORDER BY a LIMIT 10) UNION (SELECT a FROM t2 WHERE a=11 AND B=2 ORDER BY a LIMIT 10);
但是,使用ORDER BY 各个SELECT语句暗示 没有关于的顺序 行出现在最终结果中 因为UNION默认生成一个 无序的行集。
答案 1 :(得分:1)
取的联合以某种方式结合(a)顶部,升序排序,(b)前两个,排序降序。
答案 2 :(得分:0)
在两个查询中:
select * from table order by id asc limit 1
select * from table order by id desc limit 2
我不确定你是否可以在mysql中的2个查询中执行此操作。你可以在ms-sql中这样做:
select * from table order by id asc limit 1
union all
select * from table order by id desc limit 2
答案 3 :(得分:0)
嗯,在一个查询中执行它并不是很好(尤其是从MySQL doesn't support LIMIT
in IN
subqueries开始),但这是可能的(但是子查询有点作弊):
SELECT id, name
FROM table
WHERE id = (SELECT id FROM table ORDER BY id LIMIT 1)
OR id = (SELECT id FROM table ORDER BY id DESC LIMIT 1)
OR id = (SELECT id FROM table ORDER BY id DESC LIMIT 1,1)