当表没有直接涉及外键时如何使用连接搜索数据

时间:2017-03-06 13:03:44

标签: mysql sql-server database

我想找到计算机科学系使用的建筑物和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个表时,如何使用两个表中的连接来获取数据。我还附上了我的数据库设计 任何形式的帮助指导将受到高度赞赏。

enter image description here

2 个答案:

答案 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.%';

第三张你上传的照片质量非常糟糕!

现在关于设计 - 您应该在部门教室之间建立一个链接,因为这样可以简化您提取数据的方式,因为您可以拥有相同名称的建筑物对于不同的部门。

查询说明

  1. WHERE开始 - 仅显示名称如Comp的部门。 Sci。(我们应该总是依赖这个名字,你应该考虑把 ID 列放在一起)
  2. 现在首先LEFT JOIN将获得部门Comp的所有课程。科学。
  3. 第二个LEFT JOIN将获得Comp的所有部分。科学。课程使用
  4. 第三LEFT JOIN将为您提供Comp的所有课堂。科学。部门的部门
  5. 获取此数据的连接太多。只需在这两个表之间建立一个链接,并考虑放置 ID

    祝你好运!

答案 1 :(得分:0)

表格Building的{​​{1}}栏中存在歧义问题。您需要另一个名为Classroom的表在该表中添加建筑物。

然后使用内部联接匹配这三个表以返回所需的数据。 祝你好运!..