SQL关系,多个方法,相同的结果?选择、从、何处或选择、从、加入、何处
我有两个表,一个是SQL关系,多个方法,相同的结果?选择、从、何处或选择、从、加入、何处,sql,database-design,relational-database,Sql,Database Design,Relational Database,我有两个表,一个是问题表,一个是答案表,其中包含以下示例数据: +-----------------------------------+ | Questions | +----+------------------------------+ | id | title | +----+------------------------------+ | 1 | What is your favourit
问题
表,一个是答案
表,其中包含以下示例数据:
+-----------------------------------+
| Questions |
+----+------------------------------+
| id | title |
+----+------------------------------+
| 1 | What is your favourite game? |
| 2 | What is your favourite food? |
+----+------------------------------+
+-------------------------------------------------+
| Answers |
+----+------------------------------+-------------+
| id | text | question_id |
+----+------------------------------+-------------+
| 1 | The Last Of Us | 1 |
| 2 | PlayerUnknowns Battlegrounds | 1 |
| 3 | Uncharted | 1 |
| 4 | KFC | 2 |
| 5 | Pizza | 2 |
+----+------------------------------+-------------+
创建一对多关系正如在一个问题中可以有许多答案一样,我可以执行以下任一操作:
SELECT
id, text
FROM
answers
WHERE
question_id = 1
或:
或:
它们都返回以下(预期)结果:
应该避免其中任何一种吗?有没有更好的方法?只是好奇一般情况下查询关系的注意事项。如果你只想得到答案,不要涉及问题表。 只需从答案中选择即可 将未使用的表添加到查询中毫无意义- 它使查询更难阅读,因此更难维护,
而且它使数据库更加努力地工作(尽管现代数据库可能只是优化查询中未使用的部分)以获得相同的结果。如果您只想得到答案,请不要涉及问题表。 只需从答案中选择即可 将未使用的表添加到查询中毫无意义- 它使查询更难阅读,因此更难维护,
它使数据库更难工作(尽管现代数据库可能只是优化查询中未使用的部分)以获得相同的结果。如果您想暗示“问题”和“答案”表之间的关系,则可以将“问题”表中的id列作为主键和 “答案”中的问题id列作为外键 当需要来自多个表的数据(列)时,可以使用JOIN
在您的情况下,如果您希望包含标题列,那么您可以连接表如果您希望暗示“问题”和“答案”表之间的关系,那么您可以将“问题”表中的id列作为主键和 “答案”中的问题id列作为外键 当需要来自多个表的数据(列)时,可以使用JOIN
在您的案例中,如果您希望包含标题列,那么您可以联接表,这就是我的想法,但我看到了多篇解释关系的文章,它们在声明中都使用了联接,我只是不确定我是否忽略了它,或者我是否错过了其中的要点!关系与连接不同。关系由外键强制。连接只是一种从多个表中进行选择的方法,假设某些列可用于标识行之间的连接。我了解数据库中的主键/外键方面,但如果我有一个ORM take Laravels Elount ORM,您就有一个问题模型和一个答案模型,在问题模型中,您可以创建一个answer方法,并为return分配一个answer的模型对象和一个hasMany方法,该方法检索该问题的所有答案,这是简单地只返回答案,还是检索两个表的联接以及来自这两个表的所有数据?我不知道,这取决于ORM是如何实现的。@Joe请找到一种方法来编辑您的问题(而不使答案无效),或提出一个新问题,这样您就可以问出您想问的问题,并引出您真正想知道的答案。在你的帖子中编辑澄清,而不是评论。这是我的想法,但我看到了多篇解释关系的文章,他们都在他们的声明中使用了JOIN,我只是不确定我是否忽略了它,或者我是否错过了一路上的要点!关系与连接不同。关系由外键强制。连接只是一种从多个表中进行选择的方法,假设某些列可用于标识行之间的连接。我了解数据库中的主键/外键方面,但如果我有一个ORM take Laravels Elount ORM,您就有一个问题模型和一个答案模型,在问题模型中,您可以创建一个answer方法,并为return分配一个answer的模型对象和一个hasMany方法,该方法检索该问题的所有答案,这是简单地只返回答案,还是检索两个表的联接以及来自这两个表的所有数据?我不知道,这取决于ORM是如何实现的。@Joe请找到一种方法来编辑您的问题(而不使答案无效),或提出一个新问题,这样您就可以问出您想问的问题,并引出您真正想知道的答案。在你的帖子中编辑澄清,而不是评论。对不起,我可能应该提到我的表已经分配了主键/外键,所以数据库本身知道这种关系。但我明白你的意思,我只会在希望从两个表(而不是一个表)获取数据时使用JOIN。很抱歉,我可能应该提到我的表已经分配了主键/外键,因此数据库本身知道这种关系。但我明白你的意思,我只会在希望从两个表(而不是一个表)中获取数据时使用JOIN。FKs(外键)的可能重复(“伪ER方法中的关系”)是约束,不需要查询。表表示业务/应用程序关系(ship)和关联。构建查询表达式,其结果包含给定基表所包含行的所需行。如果约束成立,那么一些表达式就不会总是返回相同的结果。FK表示,当其列值参与一个特定关系时,它们也以某种方式参与另一个关系。我们只是经常连接有FK的表。FK(外键)的可能重复(“伪ER方法中的关系”[sic])是约束,不需要查询。表表示业务/应用程序关系(ship)和关联。构建查询表达式,其结果包含给定基表所包含行的所需行。如果约束成立,那么一些表达式就不会总是返回相同的结果。FK表示,当其列值参与某一特定关系时,它们也参与某一特定关系
SELECT
answers.id, answers.text
FROM
answers
JOIN
questions
ON
answers.question_id = questions.id
WHERE
questions.id = 1
SELECT
answers.id, answers.text
FROM
questions
JOIN
answers
ON
questions.id = answers.question_id
WHERE
questions.id = 1
+-----------------------------------+
| Results |
+----+------------------------------+
| id | text |
+----+------------------------------+
| 1 | The Last Of Us |
| 2 | PlayerUnknowns Battlegrounds |
| 3 | Uncharted |
+----+------------------------------+