这个sql查询是否有效(多对多关系)

时间:2012-04-25 15:37:33

标签: mysql sql many-to-many

我只是徘徊是以下查询有效。我有一张名为教授的桌子,里面有教授。表主题包含主题。使用professor_subject表实现多对多关系,其中包含professor_id和subject_id字段。

现在我需要看看哪位教授正在教授哪个科目。我写了这个SQL查询:

SELECT concat(professor.name, " ", professor.surname) as "Professor", 
       subject.name as "Subject" 
FROM professor_subject, subject, professor 
WHERE subject.id = subject_id 
    and professor.id = professor_id;

此查询有效吗?我的意思是,它会永远做我想要的吗?我很少怀疑,因为我没有使用JOIN关键字。

谢谢:)

2 个答案:

答案 0 :(得分:1)

没有。这里没有什么能将教授与学科联系起来。您正在使用没有条件的交叉连接(不确定where子句中的subject_id和professor_id是表值还是查询参数)。你需要这样的东西:

select concat(professor.name, " ", professor.surname) as "Professor",
       subject.name as "Subject"
from professor
inner join professor_subject
    on professor.id = professor_subject.professor_id
inner join subject
    on professor_subject.subject_id = subject.id

答案 1 :(得分:1)

假设subject_id和professor_id在professor_subject中,你没问题。在JOIN关键字在所有SQL版本(例如Oracle pre-9i)中可用之前,这就是联接的完成方式。