单个查询从多个表中收集数据

时间:2017-04-12 18:27:12

标签: mysql sql postgresql

我在从我设计的SQL数据库中收集数据时遇到问题。

这是一个不同类型的问题表,每个类型都有自己的表,具有不同的列,并将questionid作为引用此表的外键,如下所示。

 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)

有没有办法在一个查询中收集所有不同的问题,或者我是否必须查询每个问题类型,或者是否有一些我可以在数据库表设计中更改的内容。

1 个答案:

答案 0 :(得分:1)

根据您的描述,您可以使用Postgres继承。这是一个表格可以相互关联的工具。开始了解它的地方在documentation

使用继承,您将拥有一个名为questions的父表,它定义questionId和其他相关列。然后,您可以定义多个其他表,例如从matchingPairsQuestions继承的questions。然后,查询和外键可以引用单个“子”表,也可以引用所有表作为单个表。