我想找到计算机科学系使用的建筑物和room_number。 (使用内部联接)来自以下设计,因为表没有直接链接。
教室桌
Building Room_number Capacity
Packard 101 500
Painter 514 10
Taylor 3128 70
Watson 100 30
Watson 120 50
部门表
dept_name building budget
Biology Watson 90000.00
Comp. Sci. Taylor 100000.00
Elec. Eng. Taylor 85000.00
Finance Painter 120000.00
History Painter 50000.00
Music Packard 80000.00
Physics Watson 70000.00
我尝试了什么
SELECT classroom.room_number, classroom.building
FROM classroom
INNER JOIN department
ON
department.building=classroom.building
1)当两个表没有直接链接但在它们之间有4,5个表时,如何使用两个表中的连接来获取数据。我还附上了我的数据库设计 任何形式的帮助指导将受到高度赞赏。
答案 0 :(得分:1)
好的,首先我会说数据库设计不好。
其次应该是您的查询:
SELECT cr.building, cr.room_number FROM department d
LEFT JOIN course c ON d.dept_name = c.dept_name
LEFT JOIN section s ON c.course_id = s.course_id
LEFT JOIN classroom cr ON s.building = cr.building AND s.room_number = cr.room_number
WHERE d.dept_name LIKE '%Comp. Sci.%';
第三张你上传的照片质量非常糟糕!
现在关于设计 - 您应该在部门和教室之间建立一个链接,因为这样可以简化您提取数据的方式,因为您可以拥有相同名称的建筑物对于不同的部门。
查询说明
WHERE
开始 - 仅显示名称如Comp的部门。 Sci。(我们应该总是依赖这个名字,你应该考虑把 ID 列放在一起)LEFT JOIN
将获得部门Comp的所有课程。科学。LEFT JOIN
将获得Comp的所有部分。科学。课程使用LEFT JOIN
将为您提供Comp的所有课堂。科学。部门的部门获取此数据的连接太多。只需在这两个表之间建立一个链接,并考虑放置 ID
祝你好运!
答案 1 :(得分:0)
表格Building
的{{1}}栏中存在歧义问题。您需要另一个名为Classroom
的表在该表中添加建筑物。
然后使用内部联接匹配这三个表以返回所需的数据。 祝你好运!..