В других подобных вопросах эти две проблемы рассматриваются отдельно, но я хочу объединить их в одном утверждении. Я использую 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», но он вставил все строки пороговых значений вместе.