2

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

我有 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

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

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

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

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

马特

4

3 回答 3

2

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

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

于 2012-04-23T14:25:13.860 回答
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上查看。

于 2012-04-23T17:21:53.343 回答
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
于 2012-04-23T15:05:20.153 回答