Mysql字母查询

时间:2016-11-01 18:06:39

标签: mysql sql

我需要您提供以下问题的帮助,不确定是否可能:

我有一个像这样的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|

我已经尝试了几种方法,但没有成功,而且此时我不确定这是否真的可以通过一次查询来完成。

在此先感谢您,我非常感谢您的建议和帮助。

2 个答案:

答案 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);

它有点脏,但适用于我,查询速度更快。