【问题标题】:Select unique from all columns into a single column从所有列中选择唯一到单个列
【发布时间】:2012-03-10 01:48:10
【问题描述】:

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

【问题讨论】:

  • 听起来很有趣。你有什么问题?
  • 到目前为止您能发布您的查询吗?
  • 所有列都在同一张表上吗?

标签: php mysql select distinct


【解决方案1】:

您可以使用 UNION 关键字来做到这一点。

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

结果如你所愿。

然后只需获取值并将其插入新表中,或者您可以使用 INSERT ... SELECT 快速插入。

【讨论】:

  • INSERT INTO table2 (column2) VALUES (SELECT c1 FROM table UNION SELECT c2 FROM table UNION SELECT c3 FROM table) 这不起作用
  • 查看此链接link
【解决方案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)
    )

【讨论】:

    【解决方案3】:

    我能想到的最快方法如下:

    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 语法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-18
      • 2011-03-30
      • 2012-01-24
      • 1970-01-01
      • 2012-03-28
      • 1970-01-01
      相关资源
      最近更新 更多