mysql - 连接两个几乎相同的没有空值的 sql 结果行
问题描述
我试图从这个 sql 查询中获取 currentManager 和 beforeManager,但是我猜我的 IF 语句做错了。有一个 sql 查询:
SELECT number, year_made, model,
IF(car_management.date_to >= NOW(), users.name, null) AS currentManager,
IF(car_management.date_to < NOW(), users.name, null) AS beforeManager,
statuses.name AS statusName
FROM cars
LEFT JOIN car_management ON car_management.cars_id = cars.id
LEFT JOIN users ON users.id = car_management.user_id
LEFT JOIN car_status ON car_status.cars_id = cars.id
LEFT JOIN statuses ON statuses.id = car_status.status_id
我得到的结果是 NULL 的 where IF 语句返回 else,结果如下:
我需要将这 4 行加入两个而不是 NULL 与加入的值。
有人对此问题有任何解决方案吗?
解决方案
为了减少行,您可以尝试使用(假)聚合函数 max() 和 group by
SELECT number, year_made, model,
max(IF(car_management.date_to >= NOW(), users.name, null)) AS currentManager,
max(IF(car_management.date_to < NOW(), users.name, null)) AS beforeManager,
statuses.name AS statusName
FROM cars
LEFT JOIN car_management ON car_management.cars_id = cars.id
LEFT JOIN users ON users.id = car_management.user_id
LEFT JOIN car_status ON car_status.cars_id = cars.id
LEFT JOIN statuses ON statuses.id = car_status.status_id
GROUP BY number, year_made, model, statuses.name
推荐阅读
- spring-boot - Spring Boot 不提供空/零字节静态资产
- jhipster - Jhipster 使用 redis 连接构建 docker 映像错误
- python - Kickstart Round C 2020 中的倒计时问题
- python - 如何将字典列表的值转换为字符串?
- javascript - 如何检查输入的 TOTP 密钥格式是否正确?
- c++ - 串行通信 + 使用 Teency 进行鼠标仿真
- angular - 如何在单元测试错误拦截器中测试 toHaveBeenCalled 的方法
- r - ggplot&ie with parse=T 等号问题
- excel - 如何引用所有正在运行的 Excel 应用程序实例的 COM 对象,包括隐藏和没有工作簿?
- javascript - 如何在没有硬编码的情况下有效地在 react-google-charts 中传递数据?