首页 > 解决方案 > MySQL SELECT 记录从特定日期不存在

问题描述

我有两张桌子:

用户

1. id
2. name
3. surname
4. email

门票

1. id
2. id_user
3. film
4. date_selling

我想列出所有用户自特定日期以来没有买过票。

我尝试了很多组合,但我找不到达到结果的正确方法。

查询一:

SELECT u.* 
FROM users u 
LEFT JOIN tickets t ON t.id_user = u.id
WHERE t.date_selling >= "2019-01-01" 
GROUP BY u.id HAVING COUNT(t.id) = 0;

查询 2:

SELECT u.* 
FROM users u 
WHERE (NOT EXISTS(
SELECT 1 
FROM tickets t 
WHERE t.id_user = u.id AND t.date_selling >= "2019-01-01"));

标签: mysqlsql

解决方案


你需要一个 WHERE 子句:

SELECT u.* FROM users u 
WHERE NOT EXISTS(
  SELECT 1 FROM tickets t 
  WHERE t.id_user = u.id AND t.date_selling >= '2019-01-01'
);

或使用 LEFT JOIN:

SELECT u.* 
FROM users u LEFT JOIN tickets t 
ON t.id_user = u.id AND t.date_selling >= '2019-01-01' 
WHERE t.id_user IS NULL;

推荐阅读