У меня такие отношения в м2м:
#main table
CREATE TABLE products_product (
id integer NOT NULL,
company_id integer,
user_id integer,
type_id integer NOT NULL,
name character varying(100) NOT NULL,
description character varying(200) NOT NULL,
tags character varying(255) NOT NULL,
image character varying(200) NOT NULL
);
#intermediate table
CREATE TABLE products_ingridientbound (
id integer NOT NULL,
ingridient_id integer NOT NULL,
company_id integer NOT NULL,
price double precision NOT NULL,
active boolean NOT NULL,
"asTopping" boolean NOT NULL
);
#final m2m table
CREATE TABLE products_ingridientproductbound (
id integer NOT NULL,
product_id integer NOT NULL,
ingridient_id integer NOT NULL,
"optionValue" integer NOT NULL,
CONSTRAINT "products_ingridientproductbound_optionValue_check" CHECK (("optionValue" >= 0))
);
Все, что я хочу сделать, это получить продукты, которые имеют 2 (в данном примере) группы ингредиентов, одну с идентификатором в диапазоне (16, 17, 18, 19), а другую в диапазоне (43, 44, 45) , Я хочу, чтобы Ingridient ID был в обеих группах одновременно.
Мой запрос выглядит так (на самом деле он сгенерирован django orm):
SELECT "products_product"."id","products_product"."name",
FROM "products_product"
INNER JOIN "products_ingridientproductbound"
ON ("products_product"."id" = "products_ingridientproductbound"."product_id")
WHERE ("products_ingridientproductbound"."ingridient_id" IN (16, 17, 18, 19)
AND "products_ingridientproductbound"."ingridient_id" IN (43, 44, 45)) LIMIT 21
Это дает мне 0 результатов, но если я запускаю запрос только с одной группой запросов IN, то это работает!
Вот данные в моей таблице "products_ingridientproductbound". Я думал, что мой запрос может вернуть продукт 3, как и в обеих группах (16 и 45), но теперь я немного запутался.
Снимок экрана phpPgAdmin