我需要您提供以下问题的帮助,不确定是否可能:
我有一个像这样的SQL表:
|**id** |**word**|
|--- | ---|
|1 | axxxx|
|2 | a.....|
|. | a...|
|. | a....|
|. | a..|
|1000 | a....|
|1001 | b.....|
|1002 | bxxxxx|
|. | b...|
|. | b..|
|. | .|
|60000 | z.....|
|.. | z..|
基本上,该字段名为' word'包含从A到Z的单词,这些单词已经按字母顺序排列。 所以我需要构建一个查询,它返回每个字母的前3行,例如:
|**word**|
|---|
|ab|
|abc|
|abcd|
|bc|
|bcd|
|bcde|
|cd|
|cde|
|cdef|
我已经尝试了几种方法,但没有成功,而且此时我不确定这是否真的可以通过一次查询来完成。
在此先感谢您,我非常感谢您的建议和帮助。
答案 0 :(得分:1)
以下是系统表 mysql.help_keyword 的示例 在您的情况下,由于您的列表只包含单词(而不是符号),您可以跳过 WHERE 子句。 请注意,我指望你的话语是独一无二的。
select t1.name
from mysql.help_keyword as t1
join mysql.help_keyword as t2
on left(t2.name,1) =
left(t1.name,1)
and t2.name <=
t1.name
where left(t1.name,1) between 'A' and 'Z'
and left(t2.name,1) between 'A' and 'Z'
group by left(t1.name,1)
,t1.name
having count(*) <= 3
order by t1.name
;
答案 1 :(得分:0)
感谢您的帮助
我已经用以下查询解决了这个问题:
select word from words w, ( select min(id) as ids from words group by left(word,1) ) as ids where w.id between ids.ids and (ids.ids + 2);
它有点脏,但适用于我,查询速度更快。