插入其他表格并更新

时间:2018-07-27 08:31:09

标签: sql postgresql dml

CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    username TEXT NOT NULL,
    UNIQUE(username)
);

CREATE TABLE alert_triggers(
    id SERIAL PRIMARY KEY,
    uid INTEGER REFERENCES users(id),
    price_hi REAL,
    active_hi BOOLEAN DEFAULT TRUE,
    price_lo REAL,
    active_lo BOOLEAN DEFAULT TRUE
);

CREATE TABLE alerts (
    id SERIAL PRIMARY KEY,
    uid INTEGER REFERENCES users(id),
    event INTEGER NOT NULL
);

CREATE TABLE prices (
    stamp DATETIME PRIMARY KEY,
    price REAL
);

在插入新价格后,我要执行以下四个操作:

  1. 如果PRICE大于或等于PRICE_HI,而ACTIVE_HI为TRUE,则应将ACTIVE_HI设置为FALSE,并使用事件ID 1插入警报表。
  2. 如果PRICE小于PRICE_HI,则ACTIVE_HI应该设置为TRUE。
  3. 如果PRICE小于或等于PRICE_LO,而ACTIVE_LO为TRUE,则应将ACTIVE_LO设置为FALSE,并使用事件ID 2插入警报表。
  4. 如果PRICE大于PRICE_LO,则ACTIVE_LO应该设置为TRUE。

为此,我需要同时更新和查询一个表并将查询结果插入到另一个表中。

事件:

Price Above PRICE_HI       1
Price Below PRICE_LO       2 

这就是我被困住的地方。我想执行以下操作:

INSERT INTO alerts (
   uid,
   event
) SELECT uid,1
FROM (
    UPDATE alert_triggers
        SET active_hi = FALSE
        WHERE active_hi = TRUE AND price_hi <= 5.0
    RETURNING uid
);

0 个答案:

没有答案