【问题标题】:Join two almost identical sql result rows with no null values连接两个几乎相同的没有空值的 sql 结果行
【发布时间】:2020-05-11 14:32:51
【问题描述】:

我试图从这个 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,结果如下:

Sql query result photo

我需要将这 4 行连接成两行,而不是 NULL 和连接值。

有人对此问题有任何解决方案吗?

【问题讨论】:

    标签: mysql sql if-statement join left-join


    【解决方案1】:

    为了减少行数,您可以尝试使用(假)聚合函数 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      • 2014-04-08
      • 1970-01-01
      相关资源
      最近更新 更多