所以,我尝试使用这个查询:
SELECT name, pID, fname, lname, picpath, email
FROM Department, Professor
WHERE Department.dID = Professor.dID
AND Department.dID = ?
AND Professor_Comment.pcID = Professor.pcID
AND Professor_Comment.pcID = Comment.pcID;
这不起作用。它返回0结果
我的表格如下: 部门 -
教授 -
教授评论 -
评论 -
答案 0 :(得分:2)
因为你正在学习我会建议你一次构建这篇文章,以便更好地了解正在发生的事情,以便你能解决这个问题。
例如,首先,构造查询以首先返回部门名称和教授信息。类似的东西:
SELECT name, pID, fname, lname, picpath, email
FROM Department, Professor
WHERE Department.dID = Professor.dID AND Department.dID = ?
我建议使用别名,以便更容易理解。不确定你是否已经接受过这方面的教育,但这确实使阅读查询变得更加容易:
SELECT d.name, p.pID, p.fname, p.lname, p.picpath, p.email
FROM Department d, Professor p
WHERE d.dID = p.dID AND d.dID = ?
然后在下一个表中添加要加入的内容,依此类推,直到它返回您需要的所有内容。
你正在做的加入是旧学校/旧式 - Department.dID = Professor.dID。再说一遍,我不确定你的教学方法,但现在普遍认为没有表连接条款不在你的where子句中。相反,上面的查询看起来像:
SELECT d.name, p.pID, p.fname, p.lname, p.picpath, p.email
FROM Department d
INNER JOIN Professor p on d.dID = p.dID
WHERE d.dID = ?
当然,如果您尚未显示此内容,那么您可能还不想使用此语法。 : - )
编辑 - 当我在您的数据库模型中查看更多内容时,我不确定您为何会有教授评论。这是一个联结表,但只有在存在多对多关系时才需要这种表。
教授与评论的关系是一对多的。教授可能会有很多评论,但评论只能有一位教授。如果我理解了这一点,那么你就不需要教授评论表,因为此时布局就出现了。