【问题标题】:How to merge data from multiple tables in SQL如何在 SQL 中合并多个表中的数据
【发布时间】:2011-04-07 03:40:26
【问题描述】:


我想我的情况很复杂。这是场景。
我在 SQL Server 中有 3 个表。
注册,学生,课程。 (仅供参考,没有外键)
表列是
Student - StudentId、StudentName
Course - CourseId、CourseName
Enrollment - EnrollmentId、StudentId、 CourseId, CourseResult

样本数据
学生 - s1, Sid
课程 - c1,科学
注册 - 1, s1, c1, 80

我想要一个选择如下数据的 SQL 查询

1, s1, Sid, c1, 科学, 80

我在 DAL 层中通过多次调用数据库来做到这一点。但想在一次调用中完成,并在 DB 中完成。

任何一个来救援!

【问题讨论】:

  • @Adam:Reddy 不明白您可以在 SQL 中连接表以获取请求格式的数据。尝试加入数据客户端。它没有被卡住,它不知道有更好的选择。
  • @Paul:好主意。我明白你的观点。澄清一下我的问题(这并不重要,因为已经有几个很好的答案):我想我希望 Reddy 做更多的研究和/或至少在提出问题之前尝试他/她自己的查询和(也许)否决有用的答案。
  • @Adam:我实际上在我的职业生涯中经常看到这种情况。有人可能是某种语言的编程专家,但可能从未上过 db 课程,或者可能跳过了涉及联接的那一天。因此,他们尝试将数据加入代码中,只有当他们意识到这是多么困难时(如果他们完全意识到的话),他们可能会去寻找更好的解决方案。这就是雷迪在这里的经历。一个很好的、可教的时刻。
  • @Adam:我尝试过嵌套查询,但不明白如何使用当前行数据调用另一个表中的数据。我知道我走错了方向。因此,与其把时间花在可能在未知时间内可能不会产生成果的研究上,不如想想我是否可以同时获得社区帮助!
  • @Reddy:我很高兴得知您得到了您所要求的帮助。下次,请包括您尝试过的查询;不管它有多丑陋,因为它可以帮助人们更好地解决您可能遇到的特定概念误解。干杯。

标签: sql sql-server join


【解决方案1】:

使用连接。

select enrollment.*, student.*, course.* from enrollment
   inner join Student on enrollment.studentId = student.studentId
   inner join Course on enrollment.courseId = course.courseId

【讨论】:

  • +1 很好,简洁的查询和反对过分热心的否决。
  • 可能和我一样。我们没有完全按照 OP 的要求安排我们的 SELECT 子句。我有一个简单的星号,就像我开始查询时一样,您按表格排列了星号。显然有人真的不喜欢那样。哈哈。好像 Reddy 不知道如何指定列...
  • 不用担心投反对票...我们知道您给出了我需要的答案!
  • 我没有给你反对票,但我应该鼓励使用 select * 尤其是在带有连接的查询中。您正在返回不需要的数据(例如,连接字段被多次返回)。 Select * 是一种 SQL 反模式,不应鼓励使用它。
  • 我只是想传达一个解决方案。指定各个字段没有密切关系。我不认为性能是这里的问题
【解决方案2】:

您的数据模型中实际上存在外键。它们可能没有在数据库中被标记为这样,或者您没有意识到这一点。我还认为,如果在您的列表中将 Enrollment 表放在第二位,在 Student 和 Course 之间,它会变得更清楚。 Enrollment 是将学生链接到课程的表格。

我认为您只想在三个表上使用inner join,如下所示:

SELECT e.EnrollmentId, s.StudentId, c.CourseId, c.CourseName, e.CourseResult
FROM Student AS s
JOIN Enrollment AS e ON s.StudentId = e.StudentId
JOIN Course AS c on e.CourseId = c.CourseId

【讨论】:

  • @Reddy:很好。请阅读表连接。我回答中的那个wiki链接是一个好的开始。内部和外部联接是 SQL 查询艺术中的生计。
  • 当然有我可以联系的外交关系,但我没有,故意的。我在 SQL 方面还有很长的路要走。感谢您的链接顺便说一句!
【解决方案3】:

似乎一些简单的 JOIN 就可以做到...

select 
     e.EnrollmentId 
    ,s.StudentId
    ,s.StudentName
    ,c.CourseId
    ,c.CourseName
    ,e.CourseResult
from Enrollement e
  inner join Course c on e.CourseId = c.CourseId
  inner join Student s on e.StudentId = s.StudentId

【讨论】:

    【解决方案4】:

    试试:

    SELECT e.EnrollmentId, s.StudentId, s.StudentName, c.CourseId, c.CourseName, e.CourseResult
    FROM Student s JOIN
    Enrollment e ON s.StudentId = e.StudentId JOIN
    Course c ON e.CourseId = c.CourseId
    

    【讨论】:

    • 精确。但我已经从上面的帖子中得到了答案......无论如何,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    相关资源
    最近更新 更多