【问题标题】:INNER JOIN to more than one tableINNER JOIN 到多个表
【发布时间】:2023-03-10 16:10:01
【问题描述】:

我有四张桌子

student
-------
id, int
firstName, varchar
lastName, varchar

course
------
id, int
name, varchar

semester
--------
id, int
name, varchar

mark
----
studentId, int
courseId, int
semesterId, int
mark, int

我想做一个 sql 查询,为mark 表中的每一行检索firstNamelastNamecourseNamesemesterNamemark

我尝试使用 INNER JOIN 进行此操作,但我无法为多个表创建 INNER JOIN。

我终于找到了那个代码

select student.firstName, student.lastName, course.name, semester.name, mark.mark
from mark
INNER JOIN student ON student.id = mark.studentId
INNER JOIN course ON course.id = mark.courseId
INNER JOIN semester ON semester.id = mark.semesterId

【问题讨论】:

  • 应该可以工作..你使用什么sql? mysql/ms-sql-服务器?你确定表中的数据具有正确的 id 吗?
  • 给我看看你的表结构...
  • 你说的you can't是什么意思?
  • 这很好用,有什么问题?
  • 我认为您的查询没有问题。请注意,对于内部联接,如果联接中没有对应的行,则该记录将被丢弃。换言之,如果某个学生、课程和/或学期的分数缺失,则该分数将不会被退回。

标签: sql ms-access


【解决方案1】:

在 Ms Access 中,您必须在具有多个连接的查询中包含括号:

select st.firstName, st.lastName, c.name, sm.name, m.mark
from (((mark m
        INNER JOIN student st ON st.id = m.studentId)
        INNER JOIN course c ON c.id = m.courseId)
        INNER JOIN semester sm ON sm.id = m.semesterId)

【讨论】:

    【解决方案2】:

    尝试 theta 样式连接:

    select student.firstName, student.lastName, course.name, semester.name, mark.mark
    from mark, student ,course, semester
    WHERE  student.id = mark.studentId AND course.id = mark.courseId AND semester.id = mark.semesterId
    

    【讨论】:

    • 这很奇怪,因为我已经在 Access DB (2003) 上对其进行了测试,并且可以正常工作。
    猜你喜欢
    • 2021-01-26
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    • 2011-03-03
    • 2014-01-22
    • 1970-01-01
    相关资源
    最近更新 更多