【问题标题】:Create a table from two tables where data is in rows in one table从两个表中创建一个表,其中数据在一个表中的行中
【发布时间】:2016-08-24 23:28:04
【问题描述】:

我有两个通过用户 ID 链接的表。我想从两者中创建一个新表,从每个表中提取几个字段。在一个表中,每个用户 ID 只有一行,在另一个表中,每个用户有几行数据。

第一个表很简单 - 所有数据都在一行中。
然而,在第二个表中,数据按行排列,其中每个用户 ID 有几行。我只想为每个用户 ID 找到其中的四行,然后将它们插入到我的表中的列中。这是下面的代码,但它不起作用。我可以这样嵌套子查询吗?

INSERT INTO new_table
select table1.ID, table1.user_email, table1.display_name, table2.meta-value (where table2.meta_key = ‘pet’), table2.meta-value (where table2.meta_key = ‘color'), table2.meta-value (where table2.meta_key = ‘location), table2.meta-value (where table2.meta_key = ‘house'),
from table_1, table2

【问题讨论】:

    标签: mysql sql-insert


    【解决方案1】:

    试试这个:

    INSERT INTO new_table
    (SELECT 
        t1.ID, 
        t1.user_email, 
        t1.display_name, 
        (SELECT meta-value FROM table2 AS t2 WHERE t2.meta_key = 'pet' AND t2.user_id = t1.user_id), 
        (SELECT meta-value FROM table2 AS t2 WHERE t2.meta_key = 'color' AND t2.user_id = t1.user_id), 
        (SELECT meta-value FROM table2 AS t2 WHERE t2.meta_key = 'location' AND t2.user_id = t1.user_id), 
        (SELECT meta-value FROM table2 AS t2 WHERE t2.meta_key = 'house' AND t2.user_id = t1.user_id),
        FROM table_1 AS t1
    )
    

    但是,它没有经过测试,因为我没有找到有关表架构/数据的更多详细信息。希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      您可以使用查询来加入:

      INSERT INTO new_table
      select table1.ID, table1.user_email, table1.display_name, table3.meta-value, table4.meta-value, table5.meta-value, table6.meta-value
      from table_1 inner join
      (select ID, meta_value from table2 where meta_key='pet') as table3 inner join
      (select ID, meta_value from table2 where meta_key='color') as table4 inner join
      (select ID, meta_value from table2 where meta_key='location') as table5 inner join
      (select ID, meta_value from table2 where meta_key='house') as table6;
      

      【讨论】:

        【解决方案3】:
        INSERT INTO new_table
        select table1.ID, table1.user_email, table1.display_name,
               max(if(table2.meta_key = 'pet', table2.meta-value, NULL)),
               max(if(table2.meta_key = 'color', table2.meta-value, NULL)),
               max(if(table2.meta_key = 'location', table2.meta-value, NULL)),
               max(if(table2.meta_key = 'house', table2.meta-value, NULL))
         from table1
         left join table2 on table2.user_id=table1.user_id
        group by table1.ID, table1.user_email, table1.display_name
        

        【讨论】:

          【解决方案4】:

          我让它工作了。我不知道这是否比其他任何建议更好或更差。

           INSERT INTO new_table
           SELECT t1.ID,  t1.user_email,  t1.display_name, 
                  GROUP_CONCAT(IF(m.meta_key = 'pet_field', m.meta_value, NULL)) AS pet,
                  GROUP_CONCAT(IF(m.meta_key = 'color_field', m.meta_value, NULL)) AS color,
                  GROUP_CONCAT(IF(m.meta_key = 'location_field', m.meta_value, NULL)) AS location,
                  GROUP_CONCAT(IF(m.meta_key = 'house_field', m.meta_value, NULL)) AS house
           FROM wp_users t1,
                wp_usermeta m
           WHERE u.ID = m.user_id
           GROUP BY u.ID;
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-08-31
            • 1970-01-01
            • 1970-01-01
            • 2018-06-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多