mysql - 检索满足一个条件但不满足另一个条件的记录

标签 mysql sql

我有一个名为 tuition
的表 我想检索所有学习 111 和不学习 333
的学生 这是我能想到的:

http://www.sqlfiddle.com/#!2/f6411/3

stud_id | subject_id
--------------------
    1       111
    1       222
    2       222
    2       333
    3       111
    3       222
    3       333
    4       111
    4       222

输出:

stud_id
-------
   1
   4 

最佳答案

三种选择:

  1. 使用 HAVING 子句和 WHERE 子句:

    SELECT *
    FROM tution 
    WHERE subject_id = 111 OR subject_id=333
    GROUP BY stud_id
    HAVING COUNT(DISTINCT subject_id)=1 AND subject_id<>333
    

    结果为 SQL Fiddle .

  2. 使用不带 WHERE 子句的 HAVING 子句:

    SELECT *
    FROM tution 
    GROUP BY stud_id
    HAVING COUNT(DISTINCT subject_id)=2 AND subject_id =111 AND subject_id<>333
    

    结果为 SQL Fiddle .

  3. 使用 IN:

    SELECT *
    FROM tution
    WHERE subject_id=111
    AND stud_id NOT IN (SELECT stud_id FROM tution WHERE subject_id= 333)
    

    结果为 SQL Fiddle .

结果:

STUD_ID  SUBJECT_ID
1        111
4        111

关于mysql - 检索满足一个条件但不满足另一个条件的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23671534/

相关文章:

mysql - 创建表时的 SQL 整数范围

mysql - 如何使用 'greater than' 和 'group by' 创建连接?

java - JDBC自动查询转的很慢

mysql - 更改列名的动态过程

SQL Server : ALTER with ADD new column

sql - 当我必须处理列中的值列表时,SQL 中有什么好的做法?

php - 基于 Mysql 模式的复杂结果集

mysql - Rails 使用 ActiveRecord 乘以 afcolumn 的值

使用 IN 的 MySQL 条件更新

mysql - 如何在一张表中包含多个select语句