0

我有一个示例表,其中包含以下行的答案。id 可能是重复的,因为它与基于 id 的问题表连接(即一个问题可能有多个答案)

answers.id | answers.username | answer | date
   1       |       mikha      | you    | 2013-01-01 00:00:00   
   1       |     maricela     | really | 2013-01-01 00:00:00 
   1       |        guy       | rock   | 2013-01-01 00:00:00

是否有一个查询可以用来选择“maricela”回答后的所有行?

类似于:

SELECT * FROM answers WHERE id = 1 AND answers.username > 'maricela'

但是上面将返回 0 行,因为上面的操作将按字母顺序选择,而按字母顺序的人在 maricela 之前。

有什么方法可以逐行选择具有值的行吗?排在ID=1USERNAME=mariclea之后

4

3 回答 3

2

强烈建议你在你的答案表中添加一个唯一的 id,并有一个用于加入问题表的新列:

question_id |  id | username | answer | date
    1       |   1 | mikha    | you    | 2013-01-01 00:00:00   
    1       |   2 | maricela | really | 2013-01-01 00:00:00 
    1       |   3 | guy      | rock   | 2013-01-01 00:00:00

然后你可以使用:

SELECT * FROM answers WHERE id > (
    SELECT id FROM answer WHERE username = 'maricela' and question_id = 1
)
于 2013-01-01T14:56:29.503 回答
0

我突然想到了一些事情:如果您的“之后”概念与时间相关(即在“maricela”之后插入的答案),那么您可以考虑为答案表添加日期/时间列。这样,您将确保某些答案比其他答案晚

于 2013-01-01T14:55:47.360 回答
0

这将简单地做到,

SELECT b.* FROM table1 b WHERE b.id> 
(SELECT a.id FROM table1 a WHERE a.username='maricela'
and a.answer_id=1)

实时 SQL 演示

于 2013-01-01T15:02:03.117 回答