【问题标题】:UPDATE one row in a table from a SELECT statement from another table从另一个表的 SELECT 语句更新表中的一行
【发布时间】:2018-01-30 15:53:34
【问题描述】:

我正在使用 PostgreSQL。我的表创建如下。对于给定的device_id,我想从温度表中选择最大record_timeUPDATE devices 表中last_record_time 列的记录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
);

我从temperature 表中得到最大值record_time,如下所示:

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

这行得通。如何将第二个查询的输出通过管道传输到UPDATE 语句中,以便更新devices 表中与提供的device_id 对应的记录中的last_record_time。我读过关于INNER JOIN 的文章,但这似乎汇集了几条记录。 device_iddevices 表中是唯一的。所以,我每次都需要这个UPDATE 正好一条记录。

【问题讨论】:

  • 您是否尝试过任何更新查询?
  • @krishnPatel 这是我的问题。我想UPDATE,我知道如何获得我想要的价值。但是,我不知道如何自己写出来。我想知道,UPDATE 语句实际上是如何编写的。

标签: sql postgresql


【解决方案1】:

你可以这样试试;

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

【讨论】:

  • dtdevicestemperature 的别名?
  • update devices set last_record_time = (select max(record_time) from temperature where device_id = devices.device_id) where device_id = 4 只需指定一次设备ID
猜你喜欢
  • 2019-06-03
  • 1970-01-01
  • 1970-01-01
  • 2020-11-27
  • 1970-01-01
  • 2014-07-04
  • 1970-01-01
  • 1970-01-01
  • 2021-01-05
相关资源
最近更新 更多