SQL - Вставлять строку в таблицу, только если она не существует и количество меньше порогового значения - PullRequest
0 голосов
/ 04 августа 2020

В других подобных вопросах эти две проблемы рассматриваются отдельно, но я хочу объединить их в одном утверждении. Я использую Python3 с библиотекой psycopg2 в базе данных PostgreSQL.

У меня есть таблица с 3 полями: ID, имя, bool (BIT)

Я хочу вставить строка в этой таблице только в том случае, если не существует другой строки с таким же 'именем' и 'bool' = 0, а общее количество строк с таким же ID меньше заданного порога. Более конкретно c моя таблица должна содержать не более заданного порогового количества строк с таким же ID. Эти строки могут иметь одно и то же «имя», но только одна из этих строк с таким же ID и таким же «именем» может иметь «bool» = 0.

Я пробовал с этим:

INSERT INTO table 
      SELECT 12345, abcdf , 0 FROM table 
      WHERE NOT EXISTS(
            SELECT * FROM table 
                WHERE ID = 12345 AND name = abcdf AND bool = 0) 
                    HAVING (SELECT count(*) FROM table 
                        WHERE ID = 12345) < threshold 
                    RETURNING ID;

, но строка все равно вставляется. Затем я попробовал тот же оператор, заменив «HAVING» на «AND», но он вставил все строки пороговых значений вместе.

...