测试表
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的学生
感谢进阶
答案 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 JOIN
与WHERE
子句一起使用。
LEFT JOIN test
ON pupils.pupil_id=test.pupil_id
AND test.value= 2
WHERE test.pupil is null