MySQL查询以获取跨行使用的所有不同字母

MySQL查询以获取跨行使用的所有不同字母,mysql,sql,Mysql,Sql,我有表格“单词”: 我需要清楚地找出桌子上所有的字母。 在这种情况下,结果将是: o n e t w h r 事实上,我真的不知道该怎么做。我找到了一些似乎可以解决这个问题的存储过程。在最终结果中添加新字母的所有行中进行某种迭代。 有没有办法用纯sql命令实现这一点?您可以将子字符串用于派生的理货表: SELECT DISTINCT SUBSTRING(word, n, 1) AS letter FROM words w CROSS JOIN ( SELECT a.N + b.N *

我有表格“单词”:

我需要清楚地找出桌子上所有的字母。 在这种情况下,结果将是:

o
n
e
t
w
h
r
事实上,我真的不知道该怎么做。我找到了一些似乎可以解决这个问题的存储过程。在最终结果中添加新字母的所有行中进行某种迭代。
有没有办法用纯sql命令实现这一点?

您可以将
子字符串
用于派生的理货表:

SELECT DISTINCT SUBSTRING(word, n, 1) AS letter
FROM words w
CROSS JOIN 
(
   SELECT a.N + b.N * 10 + c.N * 1000 + 1 n
     FROM 
    (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
   ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
   ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) c
) n
WHERE n <= LENGTH(w.word)
ORDER BY letter;

过程不是纯SQL命令吗?您是同时使用PHP还是仅使用MySQL/SQL/etc?看一看,我可以用PHP实现这一点。我正在使用laravel和数据库种子。我可以用某种方式解决它。但如果能用一个sql查询就可以了,那就太好了。你必须创建一个函数来实现这一点。可能对每个字符使用子字符串(colname,1,1)来分别获取它们。像这样的问题偶尔会出现——通常与某种遗传研究算法有关。通常的方法是将数据集吐出到PHP中,然后在那里处理处理。将该部分交给PHP会更容易,但拥有一个能够执行相同操作的mysql函数会快得多。
SELECT DISTINCT SUBSTRING(word, n, 1) AS letter
FROM words w
CROSS JOIN 
(
   SELECT a.N + b.N * 10 + c.N * 1000 + 1 n
     FROM 
    (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
   ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
   ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) c
) n
WHERE n <= LENGTH(w.word)
ORDER BY letter;
SELECT DISTINCT SUBSTRING(word, n, 1) COLLATE utf8_bin AS letter