MySQL 将查询转到现有 table

MySQL Pivot Query to existing table

我正在尝试创建一个查询,将数据从一个现有的 table 输入到另一个现有的 table。两者之间没有共同的id字段。

我有以下现有的 table 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

 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 用户与用户 t2 中的列相同。为 t1 用户从 t1 插入的数据必须与同一用户在 t2 中已有的数据相匹配。

我的最终查询结果是这样的(这是行不通的)

INSERT INTO t2 a
  SELECT
  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 b
  WHERE a .user field = b.user
  GROUP BY USER
  ORDER BY USER;;

       I have tried many - Can someone help me find a functional query to do this?

这是你的枢轴Table。如果您不想拥有用户 ID

,则可以删除 2. 行
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 ;