-1

我有一个这种结构的表

表格1
-------------------------------------------------- -------------------------
元ID | post_id | 元密钥 | 元值 |
-------------------------------------------------- -------------------------
1234 5 thumbnail_url http://www.domain/thumb.jpg
1235 5 swf_url http://www.domain/flash.swf
1236 5 描述 这是一个描述。
1237 6 thumbnail_url http://www.domain/thumb.jpg
1238 6 swf_url http://www.domain/flash.swf
1239 6 描述 这是一个描述。
-------------------------------------------------- -------------------------

和另一个具有这种结构的表

表#2
-------------------------------------------------- --
身份证 | post_title | 缩略图 | 瑞士法郎 | 描述
-------------------------------------------------- --
5 很棒的标题 NULL NULL NULL
6 堆栈溢出 NULL NULL NULL
-------------------------------------------------- --

我需要将表 1 中的元值复制并粘贴到表 2 WHERE post_id = ID。

任何有关查询外观的见解将不胜感激。

4

2 回答 2

2
UPDATE Table2 t2
INNER JOIN
(
   SELECT
     post_id, 
     MAX(CASE WHEN meta_key = 'thumbnail_url' THEN meta_value END) AS 'thumbnail', 
     MAX(CASE WHEN meta_key = 'swf_url' THEN meta_value END) AS 'swf',
     MAX(CASE WHEN meta_key = 'description' THEN meta_value END) AS 'description'
   FROM Table1
   GROUP BY post_id
) t1 ON t1.post_id = t2.id
SET t2.thumbnail = t1.thumbnail,
    t2.swf       = t1.swf,
    t2.description = t1.description;

SQL 小提琴演示

于 2013-01-15T10:15:07.817 回答
1

这种类型的数据转换称为枢轴。MySQL 没有枢轴函数,因此您将使用带有CASE表达式的聚合函数。

此过程将行值转换为列。要选择这种格式的数据,您将使用:

select post_id,
  max(case when meta_key = 'thumbnail_url' then meta_value end) thumbnail,
  max(case when meta_key = 'swf_url' then meta_value end) swf_url,
  max(case when meta_key = 'description' then meta_value end) description
from table1 
-- where post_id = 1
group by post_id;

然后到UPDATE表2:

update table2 t2
left join
(
  select post_id,
    max(case when meta_key = 'thumbnail_url' then meta_value end) thumbnail,
    max(case when meta_key = 'swf_url' then meta_value end) swf_url,
    max(case when meta_key = 'description' then meta_value end) description
  from table1 
  -- where post_id = 1
  group by post_id
) t1
  on t2.id = t1.post_id
set t2.thumbnail = t1.thumbnail,
    t2.swf = t1.swf_url,
    t2.description = t1.description;

请参阅带有演示的 SQL Fiddle

于 2013-01-15T10:18:47.593 回答