我有两张桌子;讲师表和课程表。
myStr2 = "CREATE TABLE Lecturers (lec_no VARCHAR(3), name VARCHAR(30), email VARCHAR(30), PRIMARY KEY(lec_no))"
myStr3 = "CREATE TABLE Courses (course_code VARCHAR(6), course_name VARCHAR(30), lec_no VARCHAR(3), PRIMARY KEY(course_code), FOREIGN KEY(lec_no) REFERENCES Lecturers(lec_no))"
我想创建一个查询来返回讲授某个课程的讲师的名字。结果应该只返回讲师的名字,而不是别的。我创建了一个执行此操作的函数。这是我的代码:
def get_lecturer(self,course_code):
self.course_code = course_code
self.myCursor.execute("SELECT name FROM Lecturers WHERE course_code = (?) IN (SELECT name, course_code FROM Lecturers, Courses WHERE Lecturers.lec_no = Courses.lec_no"),(self.course_code))
return self.myCursor.fetchall()
当我这样做时,我收到语法无效的错误。这样做的正确方法是什么?
答案 0 :(得分:0)
您可以将两个WHERE表达式放在同一个查询中:
SELECT name
FROM Lecturers, Courses
WHERE Lecturers.lec_no = Courses.lec_no
AND course_code = ?
但是使用JOIN更好地编写连接:
SELECT name
FROM Lecturers
JOIN Courses USING (lec_no)
WHERE course_code = ?
或者,您也可以使用IN,您真的想要使用子查询(但如果已知子查询返回单个值,则应将IN
替换为=
):
SELECT name
FROM Lecturers
WHERE lec_no IN (SELECT lec_no
FROM Courses
WHERE course_code = ?)