【问题标题】:How to implement SQL join on multiple keys for two tables using where clause?如何使用 where 子句对两个表的多个键实现 SQL 连接?
【发布时间】:2020-01-31 01:26:46
【问题描述】:

我有兴趣使用以下两个表格按性别查找商学院 2018 年秋季第一周的学生人数。这里的 ID 是每个数据表的主键或主键的一部分。在计划表中,程序是学生的大学(对于我们的例子,“Business”),Sex 具有值 M 和 F,TERM 具有值,“Fall”、“Spring”和“Summer”,Sessions 具有值、“第 1 周”和“第 2 周”。我想知道你是否可以检查我的代码。我是 SQL 的新手!我真诚地感谢你的时间。

我的 SQL 代码:

SELECT count(Student.ID) as COUNT, Student.Sex as Sex
FROM Student JOIN Plan
on Student.ID=Plan.ID
WHERE Student.Term="Fall"
AND Student.Sessions="1st Week"
AND Plan.Program="Business"
GROUP BY Student.Sex;

【问题讨论】:

  • 查询有什么问题?你试过了吗?
  • @tcadidot0 我的潜在老板让我为上述表格编写查询。他没有给我数据。我根据我的基本理解编写了这个查询。我对这个查询没有信心!
  • 如果是这样,我给你的建议是你需要有能力测试你自己的查询。您已经获得了表模式示例,那么为什么不创建一个假数据来测试您的查询呢?如果您没有任何要测试的 DBMS (MySQL),您可以使用可用的在线小提琴之一,例如 db-fiddle.com 。至少通过你自己的测试,你知道这个查询会起作用,你可以给你潜在的老板一个明确的答案。想象一下,当您在这里提问时,有人说您的查询是正确的,然后当他问您是否正确时,您会回答“这就是他们在 SO 中所说的”吗?

标签: mysql sql sqlite


【解决方案1】:

这个问题的答案取决于计划表中的 ID 列是否是学生的 ID 号,我认为不是。计划表应该有每个学生会话组合的条目,以便说明具有不同会话的同一学生。请参阅:一对多关系。从那里,您应该能够在按 select 子句中提到的所有字段分组后执行此查询。

【讨论】:

  • 这里的ID是学生证
【解决方案2】:

无论如何,我已经创建了小提琴供您参考:

https://www.db-fiddle.com/f/7G2DwLB6SNqbAtKeD96nWG/1

我可以得出结论,根据您给出的查询条件,它是正确的。但是就像@Benny 提到的那样,字段ID 通常指的是表数据ID。例如,Student 中的 ID 是学生 ID,而 Plan 很可能是每个计划的 ID。但是你说它是相同的并且Plan 表中没有student_id 列,所以应该没问题。

【讨论】:

  • 非常感谢!我很感激!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-23
  • 1970-01-01
  • 2022-01-18
  • 2016-04-05
  • 1970-01-01
  • 2015-04-27
  • 2021-08-04
相关资源
最近更新 更多