Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL-我怎样才能得到老师叫约翰教的所有学生的名字?_Sql_Mysql_Database_Join - Fatal编程技术网

MySQL-我怎样才能得到老师叫约翰教的所有学生的名字?

MySQL-我怎样才能得到老师叫约翰教的所有学生的名字?,sql,mysql,database,join,Sql,Mysql,Database,Join,我怎样才能得到老师叫约翰教的所有学生的名字 学生 id name 学生有老师 teacher_id student_id id name 老师 teacher_id student_id id name 你必须使用。内部联接通过基于联接谓词组合两个表的列值来创建新的结果表。您的查询可能如下所示: SELECT student.name FROM student INNER JOIN student_has_teacher ON (student_has_tea

我怎样才能得到老师叫约翰教的所有学生的名字

学生

id
name
学生有老师

teacher_id
student_id
id
name
老师

teacher_id
student_id
id
name
你必须使用。内部联接通过基于联接谓词组合两个表的列值来创建新的结果表。您的查询可能如下所示:

SELECT      student.name
FROM        student
INNER JOIN  student_has_teacher ON (student_has_teacher.student_id = student.id)
INNER JOIN  teacher ON (teacher.id = student_has_teacher.teacher_id)
WHERE       teacher.name = 'John';
select s.id, s.name
from student s
inner join student_has_teacher sht on s.id = sht.student_id
inner join teacher on sht.teacher_id = t.id
where t.name = 'John'
你必须使用。内部联接通过基于联接谓词组合两个表的列值来创建新的结果表。您的查询可能如下所示:

SELECT      student.name
FROM        student
INNER JOIN  student_has_teacher ON (student_has_teacher.student_id = student.id)
INNER JOIN  teacher ON (teacher.id = student_has_teacher.teacher_id)
WHERE       teacher.name = 'John';
select s.id, s.name
from student s
inner join student_has_teacher sht on s.id = sht.student_id
inner join teacher on sht.teacher_id = t.id
where t.name = 'John'

下面的第一个查询假设student\u has\u teacher中可能存在重复记录,并将避免导致重复结果,即使是这种情况:

select s.id, s.name
from student s
where s.id in (
    select sht.student_id 
    from student_has_teacher sht
    inner join teacher on sht.teacher_id = t.id
    where t.name = 'John'
)
如果student\u has\u teacher中没有重复项,则可以使用联接,如下所示:

SELECT      student.name
FROM        student
INNER JOIN  student_has_teacher ON (student_has_teacher.student_id = student.id)
INNER JOIN  teacher ON (teacher.id = student_has_teacher.teacher_id)
WHERE       teacher.name = 'John';
select s.id, s.name
from student s
inner join student_has_teacher sht on s.id = sht.student_id
inner join teacher on sht.teacher_id = t.id
where t.name = 'John'

下面的第一个查询假设student\u has\u teacher中可能存在重复记录,并将避免导致重复结果,即使是这种情况:

select s.id, s.name
from student s
where s.id in (
    select sht.student_id 
    from student_has_teacher sht
    inner join teacher on sht.teacher_id = t.id
    where t.name = 'John'
)
如果student\u has\u teacher中没有重复项,则可以使用联接,如下所示:

SELECT      student.name
FROM        student
INNER JOIN  student_has_teacher ON (student_has_teacher.student_id = student.id)
INNER JOIN  teacher ON (teacher.id = student_has_teacher.teacher_id)
WHERE       teacher.name = 'John';
select s.id, s.name
from student s
inner join student_has_teacher sht on s.id = sht.student_id
inner join teacher on sht.teacher_id = t.id
where t.name = 'John'

下面的查询肯定会给出所需的结果

SELECT st.name
FROM student AS st
LEFT JOIN student_has_teacher AS stte ON st.id = stte.student_id
LEFT JOIN teacher AS te ON stte.teacher_id = te.id
WHERE te.name = "John"

下面的查询肯定会给出所需的结果

SELECT st.name
FROM student AS st
LEFT JOIN student_has_teacher AS stte ON st.id = stte.student_id
LEFT JOIN teacher AS te ON stte.teacher_id = te.id
WHERE te.name = "John"

听起来像是家庭作业。大概你有一张学生和老师的桌子。你看看JOIN和WHERE语句怎么样?显然你需要看看INERNER JOHN子句。+1表示INERNER JOHN。真的哈哈!听起来像是家庭作业。大概你有一张学生和老师的桌子。你看看JOIN和WHERE语句怎么样?显然你需要看看INERNER JOHN子句。+1表示INERNER JOHN。真的哈哈!当然,您不应该使用select*,这也是一种糟糕的技术。加入时会浪费服务器和网络资源。不要鼓励使用糟糕的技术。当然,你不应该使用select*,这也是糟糕的技术。加入时会浪费服务器和网络资源。不要鼓励使用拙劣的技术。