我有两个问题,一个是检查否。表STUDENTNO
Subjects
的次数
SELECT COUNT(*) AS COUNT
FROM Subjects R
INNER JOIN students w W ON R.studentno = W.studentno
WHERE R.studentno = '89514'
接下来是获取有效的students
(其名称和学生编号不存在于表SUBJECT
中):
SELECT DISTINCT W. *
FROM STUDENTS W
LEFT JOIN SUBJECTS R ON W.STUDENTNO + w.NAME = R.STUDENTNO + r.NAME
WHERE R.STUDENTNO + r.NAME IS NULL
我这里没有得到任何输出。我仍然需要在STUDENTNO
表中找到SUBJECT
存在的那些,但我想这不会后退。救命。请。感谢
答案 0 :(得分:1)
为您的第二个问题提供建议:
Students
别名为W
? StudentNo
是一个主键吗?如果是这样的话:检查匹配的主键就足够了 - 不需要添加一个不会给JOIN添加任何值的额外条件...... 试试这个:
SELECT DISTINCT stu.*
FROM Students stu
LEFT JOIN Subjects sub ON stu.StudentNo = sub.StudentNo AND stu.Name = sub.Name
WHERE sub.StudentNo IS NULL
或如果StudentNo
是主键,那么可能会这样做:
SELECT DISTINCT stu.*
FROM Students stu
LEFT JOIN Subjects sub ON stu.StudentNo = sub.StudentNo
WHERE sub.StudentNo IS NULL
这会返回什么吗?
答案 1 :(得分:1)
第一个查询可以简化为:
SELECT COUNT(*)
FROM Subjects
WHERE StudentNo = '89514';
第二个可能简化为:
SELECT *
FROM Students
WHERE StudentNo NOT IN (SELECT StudentNo FROM Subjects);
此公式假定Subjects表中的名称与Students表中的名称相匹配。如果学生姓名也记录在“主题”表中,则数据库的设计(严重)存在缺陷。例如,您不能更新Students表中的名称,也不能更新Subjects表中的匹配行 - 这是不好的。