如何在单个查询中从多个表读取?

时间:2018-07-05 10:30:01

标签: sqlite join

在SQLite中,我有3个表question_tablequestion_description_tableoption_table

question_table
Id question1 question2 question3 ...
1  <data>    <data>     <data>   ...
2  <data>    <data>      <data>  ...
3  <data>    <data>      <data>  ...

question_description_table
Id description1 description2 description2 ...
1  <data>          <data>      <data> ...
2  <data>          <data>      <data>...
3  <data>          <data>      <data>...
.
.

option_table
Id option1       option2    option3 ...
1  <data>          <data>     <data> ...
2  <data>          <data>      <data>...
.
.

对于每个问题,我需要在单个查询中从3个表中获取数据;对于问题1,查询应从

读取
  • question1-question_table中的列,
  • 来自description_table1
  • description_table列,
  • option1中的前四个(option2option3option4option_table)(假设每个问题有四个选项)。

我尝试了以下命令:

SELECT
    question_table.question1,
    question_description_table.description1 
FROM 
    question_table
INNER JOIN
    question_description_table ON question_description_table.id=question_table.id
;

问题是将option_table与其他两个连接在一起。是JOIN解决方案吗?如果可以,该如何使用?

1 个答案:

答案 0 :(得分:1)

如果只是回答您的问题,那么应该是这样:

select *
from question_table qt, qustion_description_table qdt, option_table ot
where qt.id = qdt.id and qdt.id = ot.id

但是,我认为您应该重组表。因此,您的question_table应包含IDQUESTION列,并在需要时包含DESCRIPTION列。

ID | QUESTION | DESCRIPTION
...    ...        ...

然后,您的option_table可以包含IDQUESTION_IDOPTIONCORRECT1-正确的0 -不正确)

ID | QUESTION_ID | OPTION | CORRECT
...    ...         ...     ...

这样,它的结构更加合理,您只需更改相应的QUESTION_ID就可以更改问题的选项。另外,如果您决定选择问题的选项,则可以运行一个简单的查询:

select qt.question, qt.description, ot.option, ot.correct
from question_table qt, option_table ot
where qt.id = ot.question_id and qt.question_id in (...)