【问题标题】:Too many results - SQL join issues结果太多 - SQL 连接问题
【发布时间】:2013-08-14 01:16:03
【问题描述】:

我从来没有在这里发过帖子,所以希望一切顺利:)。我正在使用 SQL Server 2008 R2,并且正在尝试从数据库中提取学生/课程信息。这是我正在处理的:

表 dbo.StudentsSchedule

StudentsSchedule 表包含以下字段: CRS_CODE CRS_SECT ID_NUMBER

表 dbo.StaffSchedule:

课程 部分 Teacher_ID

这是我想要完成的:

我想组合 COURSE+SECTION CODE+Teacher_ID 以将其用作唯一的“新课程 ID”,然后将学生附加到它。

我已经尝试过了,但我得到的结果太多了。我预计大约 300,但收到超过 10K+

 SELECT dbo.StaffSchedule.COURSE+'-'+ dbo.StaffSchedule.SECTION+'-'+dbo.StaffSchedule.Teacher_ID) as [NewCourseID],
          dbo.StudentSchedule.ID_NUMBER AS [StudentID],
          from dbo.StaffSchedule INNER JOIN dbo.StudentSchedule ON
   dbo.StaffSchedule.COURSE=dbo.StudentSchedule.CRS_CODE and
   dbo.StaffSchedule.SECTION=dbo.StudentSchedule.CRS_SECT

请注意,Teacher_ID 在每个 COURSE+SECTION 中只能存在一次。

有什么想法吗?我做错了吗?

【问题讨论】:

  • 选择所有列并查看变化的来源并将这些其他列添加到连接条件
  • 我在本地服务器上使用示例数据创建了示例表,它的工作原理就像一个魅力。你能发布一些你在两个表中都有的示例数据吗?
  • 嗨,你的学生表中有多少条记录?只有300+?还是 10k+ ?

标签: sql sql-server-2008 join


【解决方案1】:

让我们试试看

表 dbo.StaffSchedule:

COURSE SECTION Teacher_ID

  1       1      23
  1       1      24
  1       3      55
  1       3      24

表 dbo.StudentsSchedule:

CRS_CODE CRS_SECT ID_NUMBER

   1        1       44
   1        1       45
   1        3       89
   1        3       44

这段代码:

   SELECT dbo.StaffSchedule.COURSE+'-'+ dbo.StaffSchedule.SECTION+'-'+dbo.StaffSchedule.Teacher_ID) as [NewCourseID], dbo.StudentSchedule.ID_NUMBER AS [StudentID]
   from dbo.StaffSchedule INNER JOIN dbo.StudentSchedule ON
   dbo.StaffSchedule.COURSE=dbo.StudentSchedule.CRS_CODE and
   dbo.StaffSchedule.SECTION=dbo.StudentSchedule.CRS_SECT

将返回:

NewCourseID StudentID

   1-1-23        44
   1-1-23        45
   1-1-24        44
   1-1-24        45
   1-3-55        89
   1-3-24        89
   1-3-55        44
   1-3-24        44

我看到的唯一问题可能是,对于同一个 StudentID,您有多个值。我不知道你在看什么,所以我可以帮助你。

对不起我的英语不好!我希望这能有所帮助!

编辑新评论

NewCourseId中不用de Section真的很简单

   SELECT dbo.StaffSchedule.COURSE+'-'+dbo.StaffSchedule.Teacher_ID) as [NewCourseID],   dbo.StudentSchedule.ID_NUMBER AS [StudentID]
   from dbo.StaffSchedule INNER JOIN dbo.StudentSchedule ON
   dbo.StaffSchedule.COURSE=dbo.StudentSchedule.CRS_CODE and
   dbo.StaffSchedule.SECTION=dbo.StudentSchedule.CRS_SECT

但是……会发生什么? 结果将是:

NewCourseID StudentID

   1-23        44
   1-23        45
   1-24        44
   1-24        45
   1-55        89
   1-24        89
   1-55        44
   1-24        44

看看 ID 1-24 发生了什么,它看起来有重复的值,你明白为什么吗?再看看原来的表格。

对不起,我的英语不好!

【讨论】:

  • 我会试试这个。但是,这里有一些使情况更加复杂的事情。我需要省略ID中的SECTION字段,这样NewCourseID就只有COURSE+Teacher_ID(一个老师可以教同一个课程ID的多个部分)。是否有可能加入这样的表格,以便拉出所有连接到 CRS_SECT 的学生,即使他们在技术上属于同一个“COURSE+Teacher_ID”组。
  • 请多解释一下...您想更改de NewCourseID,您可能会遇到问题,如果您在同一课程的不同部分有多个老师怎么办?您的 ID 不会是唯一的,对吗?如果是...我无法得到“是否可以像那样加入表格”?
  • 我的意思是:教师 ID 确实需要是 dbo.StaffSchedule.COURSE+'-'dbo.StaffSchedule.Teacher_ID。例如,如果 COURSE 1001 有 10 个部分,并且有 2 位教师每人教授 5 个不同的部分,则课程 ID 将如下所示:1001-Smith & 1001-Jones。但是,我想根据 dbo.StudentSchedule 表中的内容将学生附加到 1001-Smith 或 1001-Jones。因此,如果 1001 的第 5 部分由 Smith 教授,那么该部分的所有学生都需要附加到 1001-Smith。
  • 立即查看!可能对你有帮助
  • 我正在使用上面的查询,我得到了 1699 个结果。但是,我应该只看到 200。这可能是什么原因造成的?
猜你喜欢
  • 1970-01-01
  • 2014-04-29
  • 2011-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-04
  • 2023-04-02
  • 1970-01-01
相关资源
最近更新 更多