我有一个简单的(希望)SQL问题,任何帮助都会非常多,非常感谢:)。
我有两张桌子,我想加入。
One Is Users,让我们说它叫做用户
一个是该用户的一种历史,比如称其为users_history。
这两者的关系是一个用户与多个 users_history 关系。
我想做的是一个查询,它连接表并将users_history中的最新记录加入到每个用户。
让我们说这些表是这样的,我简化了简洁。
用户
users_history
日期格式为YYYYMMDD。
最终结果是,我希望能够提取今天没有users_history记录的所有用户,例如今天是20101021。
非常感谢任何帮助! :)
答案 0 :(得分:3)
尝试
SELECT MAX(users_history.date), users.name FROM users
LEFT JOIN users_history ON users.id = users_history.user_id
GROUP BY users_history.user_id
HAVING MAX(users_history.date) < CURDATE()
如果您不希望结果集中没有任何用户历史记录的用户,请将“LEFT JOIN”更改为“JOIN”
答案 1 :(得分:1)
如果您真正想要的是找到今天没有user_history
条目的用户,您可以使用如下子查询:
SELECT * FROM users WHERE NOT EXISTS (SELECT id FROM users_history WHERE user_id = users.id AND `date` = DATE(NOW()));
恕我直言,这比你的宿主语言中的连接和一些过滤更具可读性。
编辑:根据您的日期格式说明,您可能使用varchar
列来存储日期。在这种情况下,请使用“今天”的相应字符串表示替换DATE(NOW())
- 但我建议将列类型更改为date/time type。
答案 2 :(得分:1)
取出今天没有users_history记录的所有用户,例如今天是20101021。
select
u.*
from
users u
left outer join users_history uh on
u.id = uh.user_id and uh.history_date = curdate()
where
uh.user_id is null;