如何从多态MySQL表中检索数据

如何从多态MySQL表中检索数据,mysql,sql,polymorphic-associations,Mysql,Sql,Polymorphic Associations,我在MySQL中有三个表:应用程序,问题,和问题_答案 应用程序存储用户id问题存储问题id和问题类型(即名称、NRIC、学校名称)问题\u答案存储答案参考用户id和问题id 据我所知,这种类型的关联称为多态关联。现在我不知道如何从不同的问题id中检索数据,并将它们改为列标题 我希望这是有道理的 编辑: 为了进行说明,以下是相应的表格: 应用程序: user_id name ------------------------------- 100 Leon

我在MySQL中有三个表:
应用程序
问题
,和
问题_答案

应用程序
存储
用户id
<代码>问题存储
问题id
问题类型
(即名称、NRIC、学校名称)<代码>问题\u答案存储
答案
参考
用户id
问题id

据我所知,这种类型的关联称为多态关联。现在我不知道如何从不同的问题id中检索数据,并将它们改为列标题

我希望这是有道理的

编辑:

为了进行说明,以下是相应的表格:

应用程序

user_id         name
-------------------------------
100             Leon Barnacles
101             Richard Kennard
102             Fareeza Salleh
问题

question_id     question_name
---------------------------------------------   
20              NRIC
21              Have you ever applied to TFM?
22              What's your current GPA?
23              Name of school
问题\u答案

question_id     user_id     answer
------------------------------------------------
20              100         880808-06-8990
20              100         900990-14-0911
23              102         SMK Taman Pandamaran
我希望得到的是:

Name                NRIC                Name of school
------------------------------------------------------------
Leon Barnacles      880808-06-8990      
Richard Kennard     900990-14-0911
Fareeza Salleh                          SMK Taman Pandamaran

您需要的是一个
PIVOT
类型的函数,MYSQL不支持像SQL Server或Oracle这样的PIVOT。您可以使用以下脚本在问题表数据上使用
max和case
来实现
pivot

select group_concat(concat('max(case when question_id = ''', question_id, ''' then
             answer end) as `', question_name ,'`')) into @sql from tfm_questions;

set @sql = 
concat('select full_name, ', @sql, ' from 
          (
             select a.full_name, q.question_name, an.answer, q.question_id
             from tfm_application a
             inner join tfm_questions_answer an on a.user_id = an.user_id
             inner join tfm_questions q on an.question_id = q.question_id
          ) x
       group by full_name');


select @sql;

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

我一直在
声明
时遇到语法错误。它需要额外的语法才能工作吗?仍然得到相同的消息:
您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册…
@Khairul,您能用示例表和数据创建吗