Как я могу сгенерировать строки 'a' .. 'zzz' и затем сохранить их в таблице? - PullRequest
2 голосов
/ 27 ноября 2011

Как я могу сгенерировать строки от 'a' до 'zzz', а затем сохранить их в таблице, используя MySQL?

Ответы [ 2 ]

2 голосов
/ 27 ноября 2011

Это немного сложно сделать из "чистого" MySQL по двум причинам:

  • Нет поддержки рекурсивных запросов, что заставляет вас использовать временную таблицу для генерации всех возможных вариантов .
  • Однако на временную таблицу нельзя ссылаться несколько раз из одного и того же запроса , поэтому вы не можете использовать декартово произведение (например, CROSS JOIN) для ее генерациивариации.Это заставляет вас использовать «реальную» таблицу вместо временной.

В свете всего этого решение будет выглядеть так:

CREATE TABLE TEMP_CHARS (
    C CHAR PRIMARY KEY
);

INSERT INTO TEMP_CHARS VALUES('a'), ('b'), ('c'), ('d'), ('e'), ('f'), ('g'), ('h'), ('i'), ('j'), ('k'), ('l'), ('m'), ('n'), ('o'), ('p'), ('q'), ('r'), ('s'), ('t'), ('u'), ('v'), ('w'), ('x'), ('y'), ('z');

INSERT INTO YOUR_TABLE(YOUR_FIELD)
SELECT C
FROM TEMP_CHARS
UNION ALL
SELECT CONCAT(T1.C, T2.C) -- Generate all variations (with repetition) of length 2.
FROM TEMP_CHARS T1 CROSS JOIN TEMP_CHARS T2
UNION ALL
SELECT CONCAT(T1.C, T2.C, T3.C) -- Generate all variations (with repetition) of length 3.
FROM TEMP_CHARS T1 CROSS JOIN TEMP_CHARS T2 CROSS JOIN TEMP_CHARS T3;

DROP TABLE TEMP_CHARS;
0 голосов
/ 27 ноября 2011

Это довольно легко, если вы знаете, присоединиться = декартово произведение,
ниже (альтернативная версия с использованием пользовательской функции @Branko Dimitrijevic),
Вы можете поместить в текстовый файл (join.sql): -

create table abc ( a char(3) );
create table a ( a char(1) );
insert into a values ('a','b' ..., 'z');

insert into abc select a from a;

insert into abc
select concat(a.a, b.a) from a
join a as b;

insert into abc
select concat(a.a, b.a, c.a) from a
join a as b
join a as c;

И труба в MySQL

mysql -u xxx -h xxx < join.sql
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...