Advent of SQL. Day 10 🏰 Вот такую конструкцию я 200% ни разу не встречала и не подозревала о ней! В задаче нужно было перенести данные из таблицы1 в таблицу2 и вывести только перенесенные строчки. Но обязательно в одном запросе - эммм... а как?
Дали подсказку - использовать по максимуму возможности постгри. Что ж, по первой ссылке я нашла тред на stackoverflow
С помощью CTE и RETURNING можно возвращать вставленные/удаленные/обновленные строки и передавать их в следующий запрос. Наверное, можно навешивать несколько cte, строить цепочки таких перемещений и даже ETL из raw в витрину, но звучит как мазохизм 😁
В финальном запросе получилось так:
with moved_rows as ( delete from deliveries where ... returning * ) insert into misdelivered_presents select *, date_trunc('second', LOCALTIMESTAMP) as flagged_at, 'Invalid delivery location' as reason from moved_rows returning *
Мы из delete передаем строки в insert, а из insert выводим на экран - это мэджик какой-то 😍
🏴 Фразы дня
I'm feeling stingy - ощущаю себя скупым inexplicably - необъяснимо issue an edict - издать указ meddle in - вмешиваться muck it up - все испортить plop - плюхнуться sleigh is airborne - сани находятся в воздухе volcano rim - край вулкана
📍 Advent of SQL (с впн) 📍 SQL Advent Calendar (с впн) 📍 Мои решения
@data_engineerette