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

MySQL-将一个表的行连接为另一个表的列,mysql,Mysql,真希望有人能帮上忙。我确信有更好的方法来组织我的数据,但由于时间限制,如果可能的话,最好为当前的结构提供一个解决方案 我有两个表,结构如下: 表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 基本上,我需要以以下格式返回表1和表2的一行(基于uid): id f

真希望有人能帮上忙。我确信有更好的方法来组织我的数据,但由于时间限制,如果可能的话,最好为当前的结构提供一个解决方案

我有两个表,结构如下:

表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
基本上,我需要以以下格式返回表1和表2的一行(基于uid):

id  field1  field2
1   quest1  yes
2   quest2  no
3   quest3  yes
这可能吗?在线查看时,我不断遇到数据透视表和交叉表查询,但它们似乎无法实现我的目标……除非我错了?(我可能是lol)

感谢任何人为此提供的帮助


Matt

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

有时有人对此提出批评,但辩称这是一个特性,而不是缺陷:-)Pivot查询更属于表示层,因为它们创建的不是数据库意义上的表。因此,它们更多地属于从数据库中提取数据的应用层

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

请参阅。

我不清楚输出中的字段2来自何处,以及在没有与表1中的id匹配的uid值时如何加入uid。很抱歉造成混淆。字段2理论上是表2中的一行,所以本质上uid='18'。这有帮助吗?@eggyal感谢你的解决方案,但是没有一个答案能真正告诉我我想要的结果,但我认为这取决于我对问题的解释,而不是人们对我想要的东西的理解。然而,在我看了我试图做的事情之后,我觉得我好像是在试图让一个方形块适合一个圆形孔,所以我决定采用一种不同的方法,将数据存储在不同的数组中,并以这种方式使用它们(这整件事都是使用CodeIgniter的PHP项目的一部分。不过感谢您的回答,非常感谢,因为我确实了解到了这一点something@MattSmith:您是否设法以其他方式解决了问题?也许您可以发布自己的答案供其他人学习?或者,如果问题仍未解决,您可以尝试编辑您的问题以使问题更清楚你想要的是什么?*编辑:快速重读你的问题后,我认为我修改后的答案正是你想要的?
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;