我正在尝试使此查询正常工作。目的是获得最小日期列表之间的最小日期。

但是我得到了:“ where子句”中的未知列“ di.device_id”

如何使device_id字段在第二个子查询中可见?

update device_information di
set first_seen=(
  select min(date) from (
    select min(insert_date) date from product_state_change_event where device_id=di.device_id
    union select min(insert_date) date from sensor_range_switch_change_event where device_id=di.device_id
  ) as dates
);


已编辑

实际上,我有19张桌子将它们合并。

最佳答案

我期望这样的查询:

update device_information di join
       (select min(insert_date) as minid
        from product_state_change_event psce
        group by psce.device_id
       ) psce
       on psce.device_id = di.device_id
    set first_seen = least(psce.insert_date, psce.minid);


这假定日期从不为NULL。可以轻松地将其合并到答案中(通过向least()添加更多逻辑)。

10-08 00:23