2014-08-27 89 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