3

私は2つのテーブルを持っています:

[Table container]
id int
<some more fields>
latest_measurement int

[Table measurement]
id int
container_id int
unixtime bigint

latest_measurement次に、測定テーブルの最新の測定値に基づいて、センサー テーブルの列を更新します。最新の測定値を返すサブクエリを用意しましたがsensor_id、これは機能します。

SELECT m.fill_level
from measurement m
inner join (
    select m.container_id, MAX(m.unixtime) as maxdate from measurement m GROUP BY container_id
) m2
on m2.container_id = m.container_id
where m.unixtime = m2.maxdate

しかし、このクエリを update ステートメントで次のように使用すると、例外が発生して失敗します。

UPDATE container
SET latest_fill_level = (
    SELECT m.fill_level
    from measurement m
    inner join (
        select m.container_id, MAX(m.unixtime) as maxdate from measurement m GROUP BY container_id
) m2
    on m2.container_id = m.container_id
    where m.unixtime = m2.maxdate
    and container.id = m.container_id)

そして最後に、ここに例外があります:

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

複数の値を生成する SELECT ステートメントから、複数の行をそれぞれの値で更新できる更新ステートメントを作成するにはどうすればよいですか?

4

1 に答える 1