2012-03-08 4 views
4

У меня есть таблица в моей базе данных, которая выглядит следующим образом:MySQL Заменить значение для каждой записи

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

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

Первоначально я думал о запросе, как это:

ВЫБОР ЗАМЕНИТЬ («АБВГДЕЖЗИКЛМНОПРСТУФХЧШЭЮЯ» (выберите код из таблицы), «»);

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

Любые предложения по созданию этого списка?

+0

My MySql немного ржавый, но это хороший вопрос. Я думаю, что я начну с рассмотрения сочетания чего-то с 'WHERE NOT IN (SELECT code FROM table)' –

+0

@DerekTomes Вот что я изначально думал. К сожалению, для таблицы «ОТ» потребуется отдельная статическая таблица всего алфавита. Я пытаюсь создать непосредственную таблицу ('a', 'b', 'c' ...), но этот синтаксис не разрешен в поле FROM – jwegner

+0

Зачем вам это нужно? –

ответ

1

Путь я бы рекомендовать сделать это, чтобы создать таблицу со строкой для каждой буквы в алфавите, что позволит легко удалить буквы с LEFT JOIN и GROUP_CONCAT в конце.

Не имея этого стола, вам придется прибегнуть к хакеру, создав временную «таблицу алфавита», используя JOIN между временной переменной и таблицей с большим количеством строк, чем количество букв. В этом примере я использую INFORMATION_SCHEMA.COLLATIONS.

SELECT GROUP_CONCAT(CHAR(ch) SEPARATOR '') 'missing letters' FROM 
    (SELECT @tmp:[email protected]+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.

0

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

+0

Возможный ответ и, вероятно, то, что мне нужно будет сделать. Идеальная ситуация заключается в том, чтобы просто сделать это из SQL-запроса, но этого может быть достаточно. – jwegner

+0

Вы можете сделать это в sql: создать хранимую процедуру, которая заполнит создать временную таблицу с любыми возможными буквами, тогда вам нужно будет создать простой запрос, чтобы получить результат. –

Смежные вопросы