我有 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'
)