MySQL заменяет значение из каждой записи - PullRequest
4 голосов
/ 08 марта 2012

В моей базе данных есть таблица, которая выглядит следующим образом:

=========
|id |код |
=========
|1 |a |
=========
|2 |e |
=========
|3 |r |
=========

и так далее.Я хотел бы иметь возможность сделать запрос, который скажет мне, какие буквы в алфавите , а не в таблице.

Я изначально думал о запросе, подобном этому:

SELECT REPLACE ('abcdefghijklmnopqrstuvwxyz', (SELECT code FROM table), '');

и надеемся, что это выведет 'defghijklmnopqrstuvwxyz', и я мог бы просто разложить это в массив неиспользуемых символов.К сожалению, в MySQL REPLACE не позволяет использовать таблицу значений.

Есть предложения по созданию этого списка?

Ответы [ 2 ]

1 голос
/ 09 марта 2012

Я бы порекомендовал сделать так, чтобы создать таблицу со строкой для каждой буквы в алфавите, которая бы облегчала удаление букв ЛЕВОЙ 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 объединяет полученные буквы. Результатом является строка со всеми буквами, которые не существуют в таблице A.

0 голосов
/ 08 марта 2012

Построить логику на стороне сервера.Создайте запрос, чтобы получить все используемые буквы (разные), затем просмотрите набор результатов и удалите использованные символы из возможного массива / строки.

...