sql - 如果表中不存在行,则 COALESCE
问题描述
我有这两张表:
users (这有一个 updated_at 列)和 user_updates (这有一个外键 user_id 给用户和一个 created_at 列)
我想为用户找到最新的用户更新,所以我有这个:
SELECT user_id,
MAX(COALESCE(user_updates.created_at,users.updated_at)) as last_update
FROM user_updates
INNER JOIN users
ON users.id = user_updates.user_id
WHERE user_id IN (<user_id>)
GROUP BY user_id
;
只要user_updates
存在user_id
. 但是,如果没有user_updates
,我想退回users.updated_at
. 如何更改此查询?
我怎样才能解决这个问题?
解决方案
似乎您需要left join
:
SELECT u.id,
MAX(COALESCE(up.created_at, u.updated_at)) as last_update
FROM users u LEFT JOIN
user_updates up
ON u.id = up.user_id
WHERE u.id IN (<user_id>)
GROUP BY u.id;
推荐阅读
- spring-boot - Spring Boot Admin Server 无法访问端点(未经授权的 401)
- r - 将 R markdown 中的 3 向列联表打印到 docx
- html - 调整 HTML 字段集的大小
- c# - 复合碰撞器中的Unity 2D旋转子对象
- swift - 将图像加载到 TableViewController
- docker - 使用 Spectron 进行 E2E 测试电子 - Docker Windows
- mongodb - 查找管道内的 ObjectId 匹配无法正常工作
- javascript - 当 prop 更改时,组件如何知道重新渲染?
- c++ - 可以像内联函数一样内联“内联”变量吗?
- mysql - 将 mysql 查询转换为有或没有距离的弹性搜索查询