mysql - 单个查询从多个表收集数据

标签 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
)

我还有另一个表,它还使用问题 ID 来记录哪个问题属于哪个测验

   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继承。这是一个表可以相互关联的工具。开始了解它的地方是 documentation .

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

关于mysql - 单个查询从多个表收集数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43377014/

相关文章:

php - 有没有办法使用 Laravel 5 迁移创建 citext 字段?

MYSQL - 检查时间并执行查询

mysql - 如何在mysql子查询中选择多个列

MySql关系除法内连接语法超过3个表

ruby-on-rails - Rails,如何将生日字符串 "06/20/1980"存储在数据库的时间戳字段中?

postgresql - 亚马逊免费套餐与 Heroku 付费套餐

php - 如何使用 php 上传到静态内容服务器?

mysql - 在mysql中使用group by,报错1055

sql - 如何在 PostgreSQL 中正确设计 VS 匹配表?

sql - 如何扫描两个查询之间的差异?