簡體   English   中英

從所有列中選擇唯一的一列

[英]Select unique from all columns into a single column

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

您可以使用UNION關鍵字來實現。

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

結果將根據您的要求。

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

請嘗試以下方法:

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

我能想到的最快方法是:

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將隱式為您提供DISTINCT結果,並通過排序執行臨時操作以實現此目的。 通過使用INSERT IGNORE,您只需根據UNIQUE索引拒絕INSERT操作上的行,我認為這樣做會更快。

注意:在字符串列上使用UNIQUE可以使用特定的字符長度。 因此,您可能必須指定前綴長度。 您可以在此處閱讀有關此主題的更多信息:CREATE INDEX語法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM