我正在尝试构建一个查询,在对另一个表中的日期字段应用“NOT BETWEEN”约束后为我提供不同记录的列表。
鉴于以下...
User Table:
magicID name
100 Greg
200 Fred
Event Table:
magicID date
100 2011-02-24
100 2011-02-23
100 2011-02-22
200 2011-02-22
如何获取不属于特定日期范围内的不同用户的列表?我希望这是非常明确的。如果我正在寻找在 2011-02-23 和 2011-02-24 之间没有事件记录的用户,我希望得到一个结果,
200 Fred
这就是目标。但是下面的查询给了我所有用户。我希望“NOT BETWEEN”约束是明确的。
SELECT DISTINCT users.* FROM users, events WHERE events.date NOT BETWEEN '2011-02-23' AND '2011-02-24'
此查询返回所有用户...
100 Greg
200 Fred
我遗漏了一些非常基本的东西......
最佳答案
SELECT u.magicid,
u.name
FROM USER u
LEFT JOIN EVENT e ON e.magicid = u.magicid
AND e.date BETWEEN '2011-02-23' AND '2011-02-24'
WHERE e.magicid IS NULL
If the columns are nullable, NOT EXISTS is the better choice :
SELECT u.magicid,
u.name
FROM USER u
WHERE NOT EXISTS (SELECT NULL
FROM EVENT e
WHERE e.magicid = u.magicid
AND e.date BETWEEN '2011-02-23' AND '2011-02-24')
关于mysql - 使用 'NOT BETWEEN' 约束查询不同的记录列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5110954/