2014-08-27 91 views
1

对于这个表:的MySQL从特定的ID选择,直到比赛条件

+----+-----------+--------+ 
| id | condition | values | 
+----+-----------+--------+ 
| 1 | a   | 1  | 
+----+-----------+--------+ 
| 2 | a   | 2  | 
+----+-----------+--------+ 
| 3 | a   | 3  | 
+----+-----------+--------+ 
| 4 | a   | 4  | 
+----+-----------+--------+ 
| 5 | b   | 5  | 
+----+-----------+--------+ 
| 6 | b   | 6  | 
+----+-----------+--------+ 

我怎样才能得到一个新表始于id=3(含),去到condition = b(不含):

+----+-----------+--------+ 
| id | condition | values | 
+----+-----------+--------+ 
| 3 | a   | 3  | 
+----+-----------+--------+ 
| 4 | a   | 4  | 
+----+-----------+--------+ 

添加提琴:http://sqlfiddle.com/#!2/9882f7

基本上我想要一个匹配的第一个con dition(超过一个特定的列 - ID)和第二个(在不同的列 - 条件)

回答

0

事情是这样的:

select t.* 
from table t 
where id >= 3 and id < (select min(t2.id) from table t2 where t2.condition = 'b'); 

编辑:

此查询工作于SQL小提琴罚款:

select t.* 
from t 
where id >= 3 and id < (select min(t2.id) from t t2 where t2.condition = 'b'); 
+0

不上我的小提琴工作:( – kairos 2014-08-27 23:51:46

+0

请帮我... – kairos 2014-08-28 00:18:28

+0

@kairos。我很好奇,为什么你不被接受时,它的工作原理是答案。 – 2014-08-30 13:15:33

0

如果我明白你问什么,我相信这会为你工作:

SELECT id, condition, values 
FROM tableName 
WHERE id > 2 
AND condition != b 
ORDER BY id 

我希望这对你有用。

+0

问题是条件可能也是“c”或“d”,我只想从(一个字段 - id)得到结果。 ..to ...(其他田间条件)“ – kairos 2014-08-27 23:46:06

2

您需要停止将SQL数据视为具有任何顺序。考虑集合中的SQL数据;您必须通过进行搜索,而不是按职位进行搜索。

SELECT t1.* 
FROM t AS t1 
JOIN (
    SELECT MIN(id) AS id FROM t 
    WHERE id >= 3 AND `condition` = 'b' 
) AS t2 
WHERE t1.id >= 3 AND t1.id < t2.id 
ORDER BY t1.id