Mysql 从多个表中收集数据的单个查询
从我设计的SQL数据库中收集数据时遇到问题 这是一个由不同类型的问题组成的表,每种类型都有自己的表,表中有不同的列,并将questionid作为外键引用此表,如下所示Mysql 从多个表中收集数据的单个查询,mysql,sql,postgresql,Mysql,Sql,Postgresql,从我设计的SQL数据库中收集数据时遇到问题 这是一个由不同类型的问题组成的表,每种类型都有自己的表,表中有不同的列,并将questionid作为外键引用此表,如下所示 Column | Type | Modifiers ------------+------------------------+----------- questionid | integer | not null header | charact
Column | Type | Modifiers
------------+------------------------+-----------
questionid | integer | not null
header | character varying(500) |
Indexes:
"quizquestion_pkey" PRIMARY KEY, btree (questionid)
Referenced by:
TABLE "matchingpairs" CONSTRAINT "matchingpairs_questionid_fkey" FOREIGN KEY (questionid) REFERENCES quizquestion(questionid)
TABLE "mcqchoices" CONSTRAINT "mcqchoices_questionid_fkey" FOREIGN KEY (questionid) REFERENCES quizquestion(questionid)
TABLE "questionsinquiz" CONSTRAINT "questionsinquiz_questionid_fkey" FOREIGN KEY (questionid) REFERENCES quizquestion(questionid)
TABLE "truefalsequestion" CONSTRAINT "truefalsequestion_questionid_fkey" FOREIGN KEY (questionid) REFERENCES quizquestion(questionid
)
我有另一个表格,它使用问号记录了哪个问题属于哪个测验
Column | Type | Modifiers
------------+---------+-----------
quizid | integer | not null
questionid | integer | not null
index | integer |
Indexes:
"questionsinquiz_pkey" PRIMARY KEY, btree (quizid, questionid)
Foreign-key constraints:
"questionsinquiz_questionid_fkey" FOREIGN KEY (questionid) REFERENCES quizquestion(questionid)
"questionsinquiz_quizid_fkey" FOREIGN KEY (quizid) REFERENCES quiz(quizid)
是否有一种方法可以在一个查询中收集所有不同的问题,或者我必须对每个问题类型进行查询,或者我可以在数据库表设计中更改一些不同的内容。根据您的描述,您可以使用Postgres继承。这是一个表可以相互关联的工具。开始了解它的地方是在
使用继承,您将有一个名为
questions
的父表,它定义questionId
和其他相关列。然后,您可以定义多个其他表,例如继承自问题
的匹配PairsQuestions
。然后,查询和外键可以引用单个“子”表,也可以将所有表作为一个集合引用。这些表按类型分开,因此可以使用union()组合查询结果。更好的设计是使用一个问题类型表,并在问题表中有一个问题类型列引用该表?从表1中选择questionid?我在问,如果每个问题都有不同的列,是否有一种方法可以使用单个查询来收集属于单个测验的所有问题信息?或者我只需要单独查询每种问题类型,然后在多次查询后收集所有不同的问题?你说每种问题类型都有不同的列是什么意思?向我们展示两种不同类型的表格,以及您希望输出的样子。。。。很高兴有一个简单的示例和示例数据。matchingPairs(Statement1,Statement2,PairNumber,QuestionID),mcqchoices(Choice,isCorrect,ChoiceNumber,QuestionID)
由于mcq问题中mcq选项的动态数量,我使用了两个表,我将每个选择存储为mcqchoices
表中的一个条目,matchingpairs
我认为继承在我的情况下不起作用,因为例如matchingpairs
表中有列matchingpairs(Statement1,Statement2,PairNumber,QuestionID)
,因此,一个匹配问题在matchingPairs
表中可以有许多行,由于匹配中对的数量进行了动态设计,是否有更好的方法可以设计DB表,这样我就可以通过一个简单的查询来收集所有类型的测验问题?还是我必须在单独的查询中收集每种类型的问题数据?谢谢