我有两个表,members
和studentexam
。我想要取得未注册参加考试的会员。这意味着他们在studentexa
中没有一行examID
是一个特定值。我试过这个:
$result=mysql_query("SELECT * FROM members
WHERE accessLevel='student' AND IDNo NOT IN ("SELECT studentID,examID FROM studentexam WHERE examID = $examID")
ORDER BY family ASC");
我有两个问题。首先,当使用sql语句进入另一个语句时会出现语法错误,因为“。我试过了”但是再次出错。另一个,我想如果在内部语句中只有studentID
那么得到了正确的结果但是以这种方式我不能使用where
条款。
任何帮助都将不胜感激。
答案 0 :(得分:1)
#1 您不需要子查询周围的""
。
#2 您无需SELECT
一列就可以在WHERE
子句中使用它。
$result=mysql_query("SELECT * FROM members
WHERE accessLevel='student' AND IDNo NOT IN (SELECT studentID FROM studentexam WHERE examID = $examID)
ORDER BY family ASC");
你自己几乎回答了你的问题:p
答案 1 :(得分:0)
在子查询中,您不需要将“”只是直接子查询
$result=mysql_query("SELECT * FROM members
WHERE IDNo NOT IN (SELECT studentID FROM studentexam WHERE examID = $examID) ORDER BY family ASC");
这就是你想要的所有,你不需要写accesslevel ='Student',因为我希望每个成员都拥有他唯一的ID。编写accesslevel ='Student'只会增加MySQL的负载。
答案 2 :(得分:0)
在这种情况下,NOT IN
的替代方法可以是LEFT JOIN
:
SELECT * FROM members m
LEFT JOIN studentexam se ON m.idno = se.studentId
WHERE m.accessLevel = 'student' AND se.studentId IS NULL AND examId = $examID
ORDER BY m.family