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

标签 mysql sql

我有表“words”:

id
name

insert into words values(null, 'one');
insert into words values(null, 'two');
insert into words values(null, 'three');

我需要清楚地找出整个 table 上使用的字母。 在这种情况下,结果将是:

o
n
e
t
w
h
r

我实际上不知道如何做到这一点。我发现一些存储过程似乎可以解决这个问题。对所有行进行某种迭代,将新字母添加到最终结果中。 有没有办法用纯 sql 命令来做到这一点?

最佳答案

您可以将 SUBSTRING 与派生统计表一起使用:

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;

SqlFiddleDemo

如果您需要 oO 作为不同的字母,请添加 COLLATE utf8_bin:

SELECT DISTINCT SUBSTRING(word, n, 1) COLLATE utf8_bin AS letter 

关于MySQL 查询以获取跨行使用的所有不同字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35668336/

相关文章:

php - Codeigniter无法从mysql表获取数据

php - Cakephp 2 : need help on misconfiguration with PDOStatement

java - JPA RollbackException 但不在单元测试中

php - 获取 MySQL UPDATE 中所有受影响的行

sql - 如何切换到将在另一个命令后存在的 SQL Server 服务器数据库?

php - 如何使用 ODBC 连接在 PHP 中获取结果集中的计数或行数?

sql - 简化多个子查询

MySQL JOIN 两张表(联合)

sql - 从 Django 传递可选列表参数以在原始 SQL 中进行过滤

mysql - 这个十进制的列的列和长度应该是多少