MySQL的条件不返回正确的数据

时间:2018-07-12 12:34:41

标签: mysql

  

测试表

pupil_id  |   test|value
10001     |     10|    1
10001     |     11|    2
10002     |     12|    0
10002     |     13|    1
10003     |     14|    0
10003     |     15|    2

在这里,我只过滤未曾有过value = 2的学生,因此从此示例中,这意味着我只想看到id为10002的学生,因为他从未有过value = 2

我尝试过:

JOIN test ON pupils.pupil_id=test.pupil_id AND value <> 2

但是我没有得到想要的数据,因为mysql还向我返回ID为2的学生

pupil_id  |   test|value
10001     |     10|    1
10001     |     11|    2
10002     |     12|    0
10002     |     13|    1
10003     |     14|    0
10003     |     15|    2

因此在这种WHERE条件下,它返回10001、10002、10003,因此它返回具有值2的学生,但我只希望从未具有值2的学生

感谢进阶

3 个答案:

答案 0 :(得分:0)

您可以使用多重查询,请参见下面的代码:

 select pupil_id,test,value from Table1 
where  pupil_id not in (select pupil_id from Table1 where value=2)

这是一个sqlfiddel:https://www.db-fiddle.com/f/27SuaGjL3SKfxhvqRRWUdd/4

答案 1 :(得分:0)

  

在这里,我只过滤状态为2的学生

关闭可能的查询。

查询1

SELECT 
 pupil_id
FROM 
 table
GROUP BY 
 pupil_id
HAVING NOT SUM(value= 2)

查询2

SELECT 
 pupil_id
FROM
 table 
WHERE
 pupil_id NOT IN(
   SELECT 
     pupil_id
   FROM 
     table
   WHERE
    value = 2
 )

答案 2 :(得分:0)

LEFT JOINWHERE子句一起使用。

LEFT JOIN test
  ON pupils.pupil_id=test.pupil_id
    AND test.value= 2 
 WHERE test.pupil is null