SQL JOIN 2 table



我有 2 个这样的表

学生

|-----------------------|
| id  | name   | value  |
|-----------------------|
| F01 | Ruben  | 4      |
| F02 | Dani   | 2      |
| F03 | Mike   | 3      |
| F04 | John   | 4      |
|-----------------------|

导师

|-------------------------|
| id | code  | student_id |
|-------------------------|
| 1  | S2244 | F01        |
| 2  | S3251 | F02        |
| 3  | S2244 | F03        |
| 4  | S2244 | F04        |
|-------------------------|

注意,tutor.code(S2244和S3251(是另一个表中的外键,tutor.student_id是学生表中的外键,如何使两个表合并并产生如下结果?

|-----------------------|
| id  | name   | value  |
|-----------------------|
| F01 | Ruben  | 4      |
| F03 | Mike   | 3      |
| F04 | John   | 4      |
|-----------------------|

结果与学生表相同,但数据是根据导师表中存储的内容发布的,在导师表中有代码"S3251"/"F02",未显示在结果表中

这就像"WHERE"条件,但 WHERE "条件"用于其他表,我尝试使用 JOIN 但我不能,或者我的表设计是错误的?请帮忙,我制作的这段代码没有得到很好的结果

SELECT st.id, st.name, st.value FROM student st JOIN tutor tt ON tt.code = 'S2244'

您可以使用exists

select s.*
from students s
where exists (
select 1 from tutor t where t.student_id = s.student_id and t.code = 'S2244'
)

这比join更有意义,因为您不是从tutor表中select的(。

原始尝试的问题在于student_id缺少联接条件(这两个表都很常见(。语法为:

select s.* 
from student s 
inner join tutor t on s.id = t.student_id 
where t.code = 's2244'

除了上面@GMB的答案(这是绝对正确的(之外,您还可以执行以下操作,我认为这对于初学者来说可能更直观:

select * from student
where id in (
select student_id from tutor where id = 's2244'
)

相关内容

  • 没有找到相关文章

最新更新