mysql - 排除两行,其中一行不匹配条件 - 自连接?

标签 mysql join

我有一个表,用于存储一个人在任何给定日期的茶偏好。 ;)

customer_id, tea_preference,     date
     1        'yes please'    2011-01-01
     1        'no thanks'     2011-01-02

我需要找到在给定日期范围内喜欢茶的客户,例如:

SELECT * FROM customers
WHERE tea_preference = 'yes please'
AND date BETWEEN '2011-01-01' AND '2011-01-03'

现在,该查询将给出一个匹配项,但如果客户不喜欢该范围内的某个日期的茶,我不希望该客户有任何匹配项...

我尝试过自连接,但要么它们不是答案,要么我做得不对,因为我似乎无法获得我想要的结果集。帮忙?!

最佳答案

也许:

SELECT c1.* FROM customers c1
WHERE c1.tea_preference = 'yes please' 
AND c1.date BETWEEN '2011-01-01' AND '2011-01-03'
AND NOT EXISTS 
    (SELECT c2.* FROM customers c2 
    WHERE c2.tea_preference = 'no thanks'
    AND c2.date BETWEEN '2011-01-01' AND '2011-01-03' 
    AND c1.custom_id = c2.customer_id)

关于mysql - 排除两行,其中一行不匹配条件 - 自连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5116819/

相关文章:

mysql - 从 MySQL 数据库迁移到 Jackrabbit 的过程

mysql - Ejabberd MySQL 模式

php - 如何使用外键连接 3 个表

mysql - 不使用表列长度有什么缺点吗

mysql - 从 mysql 8.0.11 开始如何解密 MySQL 密码

sql - 如何避免在连接两个表时出现重复

mysql - 按月加入 3 个表组

具有多个 select 语句的 MySQL 右外连接非常慢

带有逗号分隔结果集的sql server子查询

sql - 在 PostgreSQL 中合并两个 View