我的数据库中有一个表格如下:
======
| id |代码|
=========
| 1 | a |
=========
| 2 | e |
=========
| 3 | r |
=========
等等。我希望能够进行一个查询,告诉我表中字母表中的哪些字母不。
我原本想要这样的查询:
SELECT REPLACE('abcdefghijklmnopqrstuvwxyz',(SELECT code FROM table),'');
并希望输出'defghijklmnopqrstuvwxyz',我可以将其分解为未使用的字符数组。不幸的是,MySQL的REPLACE不允许使用值表。
有关如何构建此列表的任何建议吗?
答案 0 :(得分:1)
我 推荐 这样做的方法是创建一个表格,其中包含字母表中每个字母的行,这样可以轻松删除字母最后是LEFT JOIN和GROUP_CONCAT。
缺少该表,您将不得不求助于黑客,使用临时变量和行数多于字母数的表之间的JOIN构建临时“字母表”。对于此示例,我使用INFORMATION_SCHEMA.COLLATIONS。
SELECT GROUP_CONCAT(CHAR(ch) SEPARATOR '') 'missing letters' FROM
(SELECT @tmp:=@tmp+1 ch
FROM (SELECT @tmp:=96) a, INFORMATION_SCHEMA.COLLATIONS
WHERE @tmp<122) z
LEFT JOIN TableA ON ch=ORD(TableA.code)
WHERE TableA.code IS NULL;
嵌套的SELECT构建字母序列,LEFT JOIN删除TableA(您的表)中存在的字母。 GROUP_JOIN连接结果字母。结果是一个字符串,其中包含TableA中不存在的所有字母。
答案 1 :(得分:0)
在服务器端构建逻辑。创建一个查询以获取所有使用过的字母(不同),然后遍历结果集并清除可能的数组/字符串中使用的字符。