2016-11-03 102 views
0

是否有一种方法可以在匹配值的第一行之后选择所有行?MySQL在匹配值第一行之后选择所有行

我曾尝试:
SELECT * FROM表WHERE吃=假ORDER BY吃ASC LIMIT 1
SELECT * FROM表其中id> = 1stqueryid,水果=蓝莓

例如,我有一个表用一列水果和一个布尔值来表示他们是否吃过。

ID ---水果--------------吃
1 --- ------蓝莓真
2 --- ---橙-------真
3 ---蓝莓------假
4 ---桃------------真
5--蓝莓-----真
6 ---蓝莓------假
7 ---蓝莓------真

我想找到第一行有“吃”=“假”和“水果”=“蓝莓”。然后,选择其他具有“蓝莓”的行。
结果应该是:

ID ---水果---------------吃
3 --- --------蓝莓假
5 --- --------蓝莓真
6 --- --------蓝莓假
7 --- --------蓝莓真

有没有办法整合这两个查询?

+0

你在那张表中没有任何主键吗? – 1000111

+0

也许你可以试试UNION https://dev.mysql.com/doc/refman/5.7/en/union.html? – Hermanto

+0

感谢您的关注。对不起,我已添加ID列。实际的表名是“Messages”,表结构是“_id INTEGER,地址TEXT,日期STRING,正文STRING”,我试图在特定日期后获取与地址匹配的所有消息。 –

回答

1

你可以使用子查询来获得满足的

fruit = 'Blueberry' AND ate = false 

条件的子查询这个样子的

id >= (SELECT id 
       FROM Table 
       WHERE fruit = 'Blueberry' 
        AND ate = false 
       LIMIT 1) 

这个子查询返回的行的第一个ID,其满足了第一个ID条件

fruit = 'Blueberry' AND ate = false 

最终查询看起来像这样

SELECT * 
FROM Table 
WHERE id >= (SELECT id 
       FROM Table 
       WHERE fruit = 'Blueberry' 
        AND ate = false 
       LIMIT 1) 
     AND fruit = 'Blueberry' 

See Screen Shot

+0

你每天都会学到新的东西。 1. SQL子查询2。我是一个白痴:( 谢谢你的帮助! –

+0

@pjd'id <>'做什么? –

+0

@pjd老兄问题状态,他只想要第一个'水果='蓝莓'时开始的记录AND ate = false'匹配记录显然是'> ='(等于或大于)注意结果是'3,5,7,7' – Beginner

1
SELECT * FROM Table WHERE Fruit='Blueberry' ORDER BY Ate ASC 

此查询应满足您的要求。

+0

不完全是这个查询选择所有蓝莓行。虽然! –

相关问题