MySQL查询一些不在另一个表中的字段

时间:2013-11-17 21:53:24

标签: php mysql

我有两个表,membersstudentexam。我想要取得未注册参加考试的会员。这意味着他们在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条款。

任何帮助都将不胜感激。

3 个答案:

答案 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