Выберите уникальный из всех столбцов в одном столбце - PullRequest
0 голосов
/ 10 марта 2012

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

    C1 (Name1)          C2 (name2)          C3 (name3)
R1  R1 C1 (John)        R1 C2 (Tiny Tim)    R1 C3 (Big Sally)
R2  R2 C1 (Big Sally)   R2 C2 (john)        R2 C3 (Paul)
R3  R3 C1 (Tiny Tim)    R3 C2 (paul)        R3 C3 (rajesh)
R4  R4 C1 (Normal Ned)  R4 C2 (Big Sally)   R4 C3 (Normal Ned)

Это то, что мне нужно

    C1
R1  John
R2  Big Sally
R3  Tiny Tim
R4  Normal Ned
R5  Rajesh
R6  Paul

Ответы [ 3 ]

2 голосов
/ 10 марта 2012

Попробуйте ниже:

   insert into newtablename
   (
        select distinct  uniquenames from (
            SELECT distinct c1 as uniquenames  FROM tablename
            UNION
            SELECT distinct  c2 as uniquenames  FROM tablename
            UNION
            SELECT distinct  c3 as uniquenames  FROM tablename)
    )
2 голосов
/ 10 марта 2012

Вы можете сделать это, используя ключевое слово UNION.

SELECT c1 FROM table
UNION
SELECT c2 FROM table
UNION
SELECT c3 FROM table;

Результаты будут такими, как вы просите.

Тогда просто получите значения и вставьте их в новую таблицу, или вы можете использовать INSERT ... SELECT для быстрой вставки.

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

Самый быстрый способ, который я могу себе представить, заключается в следующем:

CREATE TABLE c_unique (c1 varchar(100 not null));
ALTER TABLE c_unique ADD UNIQUE INDEX (c1);
INSERT IGNORE INTO c_unique(c1) SELECT c1 FROM table;
INSERT IGNORE INTO c_unique(c1) SELECT c2 FROM table;
INSERT IGNORE INTO c_unique(c1) SELECT c3 FROM table;

Использование UNION неявно даст вам ОТЛИЧНЫЕ результаты и выполнит временную операцию с упорядочением, чтобы выполнить это.Используя INSERT IGNORE, вы просто отклоняете строки в операции INSERT, основываясь на индексе UNIQUE, который, как я предполагаю, будет намного быстрее.конкретная длина символа.Таким образом, вам может потребоваться указать длину префикса.Вы можете прочитать больше на эту тему здесь: CREATE INDEX Синтаксис

...