УДАЛИТЬ ... ВОЗВРАТ с колонками из другой таблицы - PullRequest
0 голосов
/ 22 октября 2018

(я пометил это PostgreSQL 10, я не знаю, поддерживают ли другие dbs симмильный синтаксис)

У меня есть две таблицы

CREATE TABLE ids (
    id SERIAL NOT NULL
);
ALTER TABLE ids ADD PRIMARY KEY (id);

CREATE TABLE ids_tab (
    id INTEGER NOT NULL,
    ts TIMESTAMP NOT NULL,
    FOREIGN KEY(id) REFERENCES ids(id) ON DELETE CASCADE
);

Я хочу написать оператор удаления для удалениявсе записи в идентификаторах (и ids_tab), где MAX (ts) для идентификатора старше N секунд.Я также хотел бы использовать оператор «RETURNING» для печати идентификатора и тс удаленных записей

Это насколько я получил (удалить старше 60 секунд):

WITH expired AS (
    SELECT * FROM (
      SELECT id, MAX(ts) AS latest 
        FROM ids_tab 
    GROUP BY id
    ) inner_tab
    WHERE inner_tab.latest < (NOW() - INTERVAL '60 SECONDS')
) 
DELETE FROM ids s
 USING expired
 WHERE s.id IN (
    SELECT 
        id
    FROM expired
    )
RETURNING *;

но выход не то, что я ожидал.при выполнении в таблицах

sqld=> select * from ids;
 id
----
  3
  4
(2 rows)

sqld=> select * from ids_tab;
 id |             ts
----+----------------------------
  3 | 2018-10-22 09:45:29.66359
  3 | 2018-10-22 09:45:30.633459
  4 | 2018-10-22 09:45:47.755611
(3 rows)

результат будет выглядеть так:

 id | id |           latest
----+----+----------------------------
  3 |  3 | 2018-10-22 09:45:30.633459
  4 |  3 | 2018-10-22 09:45:30.633459
(2 rows)

Я ожидаю, что он выведет:

 id | id |           latest
----+----+----------------------------
  3 |  3 | 2018-10-22 09:45:30.633459
  4 |  4 | 2018-10-22 09:45:47.755611
(2 rows)

Я попытался добавить какой-то видсовместный с «УДАЛИТЬ ИЗ», но я не могу даже сделать хорошо сформированными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...