从另一个表的SELECT语句更新表中的一行

时间:2018-01-30 07:25:43

标签: sql postgresql

我正在使用PostgreSQL。我的表创建如下。对于给定的device_id,我希望从温度表中选择record_time的最大UPDATElast_record_time devices列中的记录表device_id

CREATE TABLE IF NOT EXISTS devices(
  device_id serial PRIMARY KEY,
  device_name varchar(255) UNIQUE NOT NULL,
  last_record_time timestamp without time zone NOT NULL DEFAULT '1995-10-30 10:30:00'
);

CREATE TABLE IF NOT EXISTS temperature(
  device_id integer NOT NULL,
  temperature decimal NOT NULL,
  record_time timestamp without time zone,
  CONSTRAINT temperature_device_id_fkey FOREIGN KEY (device_id)
    REFERENCES devices (device_id) MATCH SIMPLE
    ON UPDATE NO ACTION ON DELETE NO ACTION
);

我从record_time表中获取最大temperature,如下所示:

SELECT MAX(record_time) FROM temperature WHERE device_id=4;

这很有效。如何将第二个查询的输出传递到UPDATE语句中,以便更新last_record_time表中与所提供的devices对应的记录中的device_id。我读过有关INNER JOIN的内容,但这似乎有几个记录。 device_id表中的devices是唯一的。所以,我每次只需要UPDATE一条记录。

1 个答案:

答案 0 :(得分:0)

你可以这样试试;

update devices set last_record_time = (select max(record_time) from 
temperature where device_id = devices.device_id)
where device_id = 4