MySQL透视查询到现有表

MySQL透视查询到现有表,mysql,pivot,Mysql,Pivot,我试图创建一个查询,将数据从一个现有表输入到另一个现有表中。这两个字段之间没有公共id字段 我有以下现有的表t1 ----------+------+-------+ |user | criteria | record| ----------+------+-------+ | 1 | 11 | K | ----------+------+-------+ | 1 | 12 | L |

我试图创建一个查询,将数据从一个现有表输入到另一个现有表中。这两个字段之间没有公共id字段

我有以下现有的表t1

    ----------+------+-------+
    |user | criteria | record|
    ----------+------+-------+   
    | 1    | 11      | K     |
    ----------+------+-------+
    | 1    | 12      | L     |
    ----------+------+-------+
    | 1    | 13      | M     |
    ----------+------+-------+
    | 1    | 16      | P     |
    ----------+------+-------+
    | 1    | 18      | R     |
    ----------+------+-------+
    | 1    | 20      | T     |
    ----------+------+-------+
    | 2    | 11      | K     |
    ----------+------+-------+
    | 2    | 12      | L     |
    ----------+------+-------+
    | 2    | 13      | M     |
    ----------+------+-------+
    | 2    | 16      | P     |
    ----------+------+-------+
    | 2    | 18      | R     |
    ----------+------+-------+
    | 2    | 20      | T     |
    ----------+------+-------+
有大量的用户和(在大约100个标准中)6个标准 我有兴趣插入到下面的现有表中

 table t2

 +----------+----------+----------+----------+----------+----------+
 | Label u  | Label v  | Label w  | Label x  | Label y  | Label z |
 +----------+----------+----------+----------+----------+----------+
 | record K | record L | record M | record P | record R  | record T|
 | record K | record L | record M | record P | record R  | record T|
 +----------+----------+----------+----------+----------+----------+

 where Criteria number 11 = Label u
       Criteria number 12 = Label v
       Criteria number 13 = Label w
       Criteria number 16 = Label x
       Criteria number 18 = Label y
       Criteria number 20 = Label z

 Note* Line 1 in t2 corresponds to user 1
       Line 2 in t2 corresponds to user 2

       There is no "user" column in t2 for the fields "user 1, user 2"

       t2 already contains data in other columns
t1 user与t2中的user列相同。为t1用户从t1插入的数据必须与同一用户在t2中已有的数据相匹配

我的最后一个问题是这样的(这不起作用)


这是你的透视表。您可以删除2。如果您不想拥有用户id,请使用

SELECT
  user,
  GROUP_CONCAT(IF (criteria = 11,record,NULL)) AS Label_u,
  GROUP_CONCAT(IF (criteria = 12,record,NULL)) AS Label_v,
  GROUP_CONCAT(IF (criteria = 13,record,NULL)) AS Label_w,
  GROUP_CONCAT(IF (criteria = 14,record,NULL)) AS Label_x,
  GROUP_CONCAT(IF (criteria = 15,record,NULL)) AS Label_y,
  GROUP_CONCAT(IF (criteria = 16,record,NULL)) AS Label_z
FROM mytable
WHERE user IN (1,2)
GROUP BY USER
ORDER BY USER;
结果

+------+---------+---------+---------+---------+---------+---------+
| user | Label_u | Label_v | Label_w | Label_x | Label_y | Label_z |
+------+---------+---------+---------+---------+---------+---------+
|    1 | P1      | P1      | P1      | P1      | R1      | T1      |
|    2 | P2      | P2      | P2      | P2      | R2      | T2      |
+------+---------+---------+---------+---------+---------+---------+
2 rows in set (0.00 sec)

MariaDB >

为了设计可以从tc和tr同时更新其他字段的查询,此答案适用于tc.a=tr.cid和tr.cid=t1.user的情况

SELECT ' Label_u'
  ,' Label_u'
  ,' Label_v'
  ,' Label_w'
  ,' Label_x'
  ,' Label_y'
  ,' Label_z'
  ,(SELECT `record` FROM `t1` WHERE `user` = b.id AND `criteria` = 11)
  ,(SELECT `record` FROM `t1` WHERE `user` = b.id AND `criteria` = 12)
  ,(SELECT `record` FROM `t1` WHERE `user` = b.id AND `criteria` = 13)
  ,(SELECT `record` FROM `t1` WHERE `user` = b.id AND `criteria` = 16)
  ,(SELECT `record` FROM `t1` WHERE `user` = b.id AND `criteria` = 18)
  ,(SELECT `record` FROM `t1` WHERE `user` = b.id AND `criteria` = 20)
  FROM tc a
     , tr b
  WHERE a .id = b .cid 
    AND b .print_id IS NOT NULL ;

你试过写什么吗?你有什么代码要发布吗?非常感谢!我如何在不输入用户的情况下将结果导入已经创建的表2(t2)——我不理解的只是Label|u|Label|v|Label|w|Label|ux|Label|y|Label|z。您是否有第二张表(t2)并希望在其中显示结果?第二个表是否包含用户字段?try:插入t2选择………第一个查询。。。。;没关系,谢谢!我还有第二个表要存储结果。它不包含用户字段。或者您创建了一个视图。把这个放在我的第一个问题之前。创建视图myt2作为从我的第一个查询中删除第二行(用户,),并在查询之前放置。插入t2
SELECT ' Label_u'
  ,' Label_u'
  ,' Label_v'
  ,' Label_w'
  ,' Label_x'
  ,' Label_y'
  ,' Label_z'
  ,(SELECT `record` FROM `t1` WHERE `user` = b.id AND `criteria` = 11)
  ,(SELECT `record` FROM `t1` WHERE `user` = b.id AND `criteria` = 12)
  ,(SELECT `record` FROM `t1` WHERE `user` = b.id AND `criteria` = 13)
  ,(SELECT `record` FROM `t1` WHERE `user` = b.id AND `criteria` = 16)
  ,(SELECT `record` FROM `t1` WHERE `user` = b.id AND `criteria` = 18)
  ,(SELECT `record` FROM `t1` WHERE `user` = b.id AND `criteria` = 20)
  FROM tc a
     , tr b
  WHERE a .id = b .cid 
    AND b .print_id IS NOT NULL ;