【问题标题】:How to retrieve data from multiple tables using Subquery?如何使用子查询从多个表中检索数据?
【发布时间】:2016-06-09 17:16:26
【问题描述】:

假设我们有两个表
student(studentID, name, department_ID)
department(departmentID, name)。
我们的目标是使用子查询从两个表中检索数据。我正在尝试这个

select * from department, student
where department.departmentID
IN (select student.departmentID from student, department 
where student.departmentID = department.departmentID)

但它返回两个表的行数的叉积。 像这样使用JOIN 可以得到正确的结果

select * from department
Inner join student
on student.departmentID = department.departmentID

并像这样使用WHERE 子句

select * from department, student
where department.departmentID = student.departmentID

我想知道是否有人可以告诉我如何在 SQL 中使用子查询。

【问题讨论】:

  • 您似乎了解编写查询以获取此信息的正确方法(明确的JOIN)。我不明白你的问题的目的。
  • 如何使用子查询?这就是@GordonLinoff 问题的目的
  • 你在没有任何谓词的情况下加入 - 所以你当然会得到一个笛卡尔积。
  • 我相信@GordonLinoff 的观点是,你为什么需要使用子查询?
  • @TomH 我只是想知道如何使用子查询来完成?只是找到了新的方法来做到这一点。

标签: sql database subquery inner-join


【解决方案1】:

希望这会有所帮助:

select *, (select name from department d where s.departmentID = d.departmentID) as dname 
from student s 
where (select name from department d where s.departmentID = d.departmentID) is not null

然而,这个问题应该使用连接来解决。要学习 subQ,请使用适当的示例。

SQL 小提琴:Test

【讨论】:

  • 感谢您的回答。它对我有用。下次我将遵循正确的示例
  • 是的,我明白了。谢谢。