0

我只是在徘徊以下查询是否有效。我有一张名为教授的表,其中包含教授。表主题包含主题。多对多关系是通过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 关键字。

谢谢 :)

4

2 回答 2

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
于 2012-04-25T15:40:29.160 回答
1

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

于 2012-04-25T15:47:55.230 回答