2012-03-10 160 views
0

我有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 
+0

聽起來很有趣。你有什麼問題? – Hamish 2012-03-10 01:51:53

+0

你可以發佈您的查詢到目前爲止? – 2012-03-10 02:00:22

+0

同一張桌子上的所有列嗎? – Starx 2012-03-10 02:50:34

回答

2

可以使用UNION關鍵字做到這一點。

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

結果將如您所願。

然後只需獲取值並將其插入新表中,或者可以使用INSERT ... SELECT快速插入。

+0

INSERT INTO表2('column2')VALUES(選擇C1 FROM表 UNION 選擇C2 FROM表 UNION 選擇C3 FROM表) 這不是工作 – 2012-03-10 02:24:03

+0

檢查此鏈接[鏈接](HTTP://開發。 mysql.com/doc/refman/5.0/en/insert-select.html) – ChuyAMS 2012-03-10 02:51:23

2

如下嘗試:

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) 
    ) 
0

我能想到的最快方法是:

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,您只需根據UNIQUE索引在INSERT操作上拒絕行,我認爲這會更快。

注意: 在字符串列上使用UNIQUE將適用於特定字符長度。因此您可能必須指定前綴長度。您可以在這裏閱讀更多關於此主題的內容:CREATE INDEX語法

相關問題