MySQL - 将一个表的行连接为另一个表的列

时间:2012-04-23 14:23:04

标签: mysql

真的希望有人可以帮忙解决这个问题。我确信有更好的方法来构建我的数据,但由于时间限制,如果可能的话,最好有一个解决当前结构的方法。

我有2个具有以下结构的表:

表1

id  field1
1   quest1  
2   quest2
3   quest3

表2

id  uid  quest1  quest2  quest3
1   18   yes     no      yes
2   27   yes     no      no

基本上,我需要使用以下格式的表2(基于uid)返回表1:

id  field1  field2
1   quest1  yes
2   quest2  no
3   quest3  yes

这有可能吗?在线查看我不断遇到数据透视表和交叉表查询,但他们似乎无法实现我所追求的目标......除非我错了? (我可能是大声笑)。

感谢任何人可以为此提供任何帮助。

马特

3 个答案:

答案 0 :(得分:2)

MySQL不支持数据透视表/交叉表查询。

它有时会受到批评,但辩护是它是一个功能,而不是缺陷:-) Pivot查询更多地属于表示层,因为它们创建的不是数据库意义上的表。因此,它们更多地属于从数据库中提取数据的应用层。

答案 1 :(得分:1)

SELECT t1.*, CASE t1.field1
  WHEN 'quest1' THEN t2.quest1
  WHEN 'quest2' THEN t2.quest2
  WHEN 'quest3' THEN t2.quest3
END AS field2
FROM t1, t2
WHERE t2.uid = 18;

sqlfiddle上查看。

答案 2 :(得分:0)

select t1.id, t2.field1, t2.field2 
from table1 t1
inner join (
    select id, 'quest1' as field1, quest1 as field2 from table2
    union all
    select id, 'quest2' as field1, quest2 as field2 from table2
    union all
    select id, 'quest3' as field1, quest3 as field2 from table2
) t2u on t1.id = t2.id
where t2.uid = 18