172 похожих чатов

Коллеги, добрый день. А не подскажите правильный способ удаления нескольких

элементов из массива используя входящий массив?
Дано: таблица в котороый одно из полей - массив строк. Необходимо сделать UPDATE и удалить все строки переданные в другом массиве. Массивы ориентировочно не будут сильно большими, но могут быть до 150-200 элементов.

14 ответов

18 просмотров

Да просто UPDATE a_table SET a_field = some_function(a_field, $1) WHERE .... Т.е. легче написать функцию разности массивов, и использовать её, мне кажется.

Evgeniy- Автор вопроса
Yaroslav Schekin
Да просто UPDATE a_table SET a_field = some_functi...

понял, спасибо, тоже пришел к такому варианту - но решил на всякий случай спросить - а то выстрелю еще себе в ногу :)

Неправильный способ: сделать unnest, подразумеваемый в нём lateral join, отфильтровать нужное, затем сгруппировать по pkey обратно при помощи array_agg. Правильный способ: переделать базу, чтобы никакого массива не было, сделать отдельную таблицу с отношэнинм 1-ко-многим.

Evgeniy- Автор вопроса
Ilya Anfimov
Неправильный способ: сделать unnest, подразумеваем...

А какой тогда PK там делать? FK - понятно у нас будет на source таблицу.

Evgeniy
А какой тогда PK там делать? FK - понятно у нас бу...

Если это действительно массив — то (referenced_field, position), очевидно. Если же это на самом деле множество, как обычно бывает — (referenced_field, value).

Evgeniy- Автор вопроса
Yaroslav Schekin
Если это действительно массив — то (referenced_fie...

Да, order не важен пока что. Почему-то считал что плохо иметь таблицу у которой по сути PK - это вся таблица. Или это вообще нормально? (учитывая, что value - это text)

Evgeniy
Да, order не важен пока что. Почему-то считал что ...

> Почему-то считал что плохо иметь таблицу у которой по сути PK - это вся таблица. Все обычные таблицы many to many — именно такие. Т.е. понятия не имею, почему Вы так считали. ;) > (учитывая, что value - это text) Ну и что? Если по сути это правильно (если дубликаты — ошибка), этот ключ должен там быть.

Evgeniy- Автор вопроса
Yaroslav Schekin
> Почему-то считал что плохо иметь таблицу у котор...

Да я всегда так и делал. Но откуда-то в голове засело - что это Bad Practice. В нашем деле же как - делаешь что-то делаешь - а потом приходит осознание, что а вдруг что-то не то делаешь. :)

Evgeniy
А какой тогда PK там делать? FK - понятно у нас бу...

Пк не делать, а брать тот, что в таблицэ ужэ есть. Можно и не первичный ключ, а любой, на самом деле — но я решыл не усложнять тот комментарий лишними подробностями.

Evgeniy
Да, order не важен пока что. Почему-то считал что ...

А, то есть это вопрос по правильному способу был что ли?

Ilya Anfimov
А, то есть это вопрос по правильному способу был ч...

В таком случае мой пред-предыдущий ответ относится не к тому.

Evgeniy- Автор вопроса
Ilya Anfimov
В таком случае мой пред-предыдущий ответ относится...

Ага, а то уже начал переделывать :) Ведь сделал же изначально так - но нет, решил а вдруг нереляционно - будет лучше :)

Evgeniy
Ага, а то уже начал переделывать :) Ведь сделал же...

Нет, как раз один-ко-многим и весь кортэж первичный ключ — это классика. А массив, с частями которого что-то делают — это не 0нф.

Evgeniy- Автор вопроса
Ilya Anfimov
Нет, как раз один-ко-многим и весь кортэж первичны...

Ну супер, на самом деле успокоили меня! Спасибо большое! Обычно стараюсь one-to-many все-таки более осмысленными делать, нежели просто ключ/значение, но тут как ни крутил - не нужно ничего дополнительного. Хотя, теперь и расширять проще будет. В общем, Илья, Ярослав, спасибо еще раз за ваши ответы!

Похожие вопросы

Обсуждают сегодня

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Чтобы перехватить все нажимания буков на форме, надо хук ставить? Пробовал на форме ОнКейДаун, оно ловит клаву если фокус не на компоненте с вводом текста
Serjone
15
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Всем привет! вывожу на общей стр дочерние ресурсыв каждом ресурсе галерея, и первая фотка должна выводиться на общей [!DocLister? &prepare=photo !]
Alekso
12
А можно вопрос? Мне сегодня сказали что у меня функция (которая просто заполняет массив значениями) не правильная void Full(double * arr, int n) { for (int i = 0; i < n; i...
† C E †
7
День добрый, подскажите пожалуйста, есть ли какой-то способ сказать ребару не компилировать определённое приложение? Всю доку их перечиатл ничего подобного не нашёл
Кирилл
14
Добрый вечер. Хочу чтобы у меня в классе поле было функцией, которая возвращает строку. Делаю так: interface ... TGetOutPath = function : String of object; ... protec...
Kirill Filippenok
12
Народ! Впервые клиенту пришло письмо от РКН, у вас, дескать, есть яндекс метрика, а нигде не написано, что вы ее юзаете. Никто не сталкивался?
Sasha Beep
10
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Здравствуйте, хочу сделать HelloWorld в консоли Дельфи, но функция API ничего не выводит, что я делаю не так? program Hello; {$APPTYPE CONSOLE} uses System.SysUtils, WinAPI.Wi...
Sergey Vinogradov
20
Карта сайта