【问题标题】:Merge columns to create new records - mysql query合并列以创建新记录 - mysql 查询
【发布时间】:2023-03-15 04:23:01
【问题描述】:

我有一个 mysql 数据库,我需要将两列合并在一起,但是我需要以这样一种方式合并这些列,使它们不仅仅是连接在一起,而是一个全新的单独记录。

例子:

Before Merge:
name    Computer-one     Computer-two
jack       hp                  dell

<insert unkown sql statement (what I need)>

After Merge
name    Computer-one
jack       hp               
jack       dell

当我尝试合并两列时,它们只是合并为一列,但不重复记录(见上图):

name    Computer-one     
jack       hpdell

目前我正在使用concat 语句。这是我能够合并项目的唯一方法。这些列可以包含空值,主键有一个自动递增的 ID。

【问题讨论】:

  • 您想如何识别“杰克”?这是动态的还是您要传递给查询的参数?您需要的解决方案是单独查询计算机 - 一个与计算机合并属于该名称的两个 firall 记录
  • @Julius A 这个数据库中可能有几个不同的名称,因此可能是动态的。作为记录,创建一个新表并像这样合并它们也是一个可以接受的答案。

标签: mysql join merge multiple-columns


【解决方案1】:

问题是您实际上不想合并它们。 您想为字段创建新行。

你可以这样做。

INSERT INTO table_name(name, Computer-one)
SELECT 
   name, Computer-two
FROM 
   table_name;

然后,您将为所有行创建新行,其中 Computer-two 值放入 Computer-one 字段。 当您看到您的表有两倍的行数并且“计算机一”字段正确时,您可以删除“计算机二”列,数据就是您想要的。

始终先进行备份或尝试测试表,以便您知道一切正常。

【讨论】:

    【解决方案2】:

    我认为您只需要 UNION ALL 语句。你可以试试下面 -

    SELECT name, "Computer-one"
      FROM YOUR_TABLE
     WHERE "Computer-one" IS NOT NULL
     UNION ALL
    SELECT name, "Computer-two"
      FROM YOUR_TABLE
     WHERE "Computer-two" IS NOT NULL;
    

    【讨论】:

      【解决方案3】:

      所以你需要对这个表做两次查询,然后合并结果。将结果插入临时表。然后为列“nane”的每条记录选择不同的记录

      SELECT INTO table2(name, model)
      SELECT A.name, A.computer-one AS model from table as A
      UNION
      SELECT B.name, B.computer-two AS model from table as B
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-26
        • 2013-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-17
        • 2019-08-12
        相关资源
        最近更新 更多