add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
Help with an interesting Postgres question: Why isn't an Index Only Scan used on a partition accessed via the parent table?.
create table union_products (
id bigserial primary key,
name varchar(255) not null,
count_seller smallint default '0'::smallint not null
);

create table companies (
id bigserial primary key,
name varchar(255) not null
);

create table products
(
id bigserial primary key,
name varchar(80),
price_for_one_product double precision,
company_id bigint not null
constraint products_company_id_foreign
references companies
on update cascade on delete cascade,
union_product_id bigint
constraint products_union_product_id_foreign
references union_products
on update cascade on delete set null
);

INSERT INTO companies (name) values ('company 1');
INSERT INTO companies (name) values ('company 2');
INSERT INTO companies (name) values ('company 3');

INSERT INTO union_products (name, count_seller) VALUES ('union product 1', 2);
INSERT INTO union_products (name, count_seller) VALUES ('union product 2', 2);


INSERT INTO products (name, price_for_one_product, company_id, union_product_id) VALUES ('product 1', 1, 1, 1);
INSERT INTO products (name, price_for_one_product, company_id, union_product_id) VALUES ('product 2', 1, 1, 2);
CREATE TABLE
CREATE TABLE
CREATE TABLE
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
SELECT C.id, C.name FROM
products P JOIN union_products U
ON P.union_product_id=U.id
JOIN companies C
ON P.company_id=C.id
WHERE P.union_product_id IN (1, 2)
GROUP BY C.id, C.name
HAVING COUNT(DISTINCT P.union_product_id) = 2 AND
SUM(P.price_for_one_product) < 100
ORDER BY C.id
id name
1 company 1
2 company 2
SELECT 2
select * from union_products
id name count_seller
1 union product 1 2
2 union product 2 2
SELECT 2
select * from products
id name price_for_one_product company_id union_product_id
1 product 1 1 1 1
2 product 2 1 1 2
3 product 3 1 2 1
4 product 3 1 2 2
5 product 3 1 3 2
SELECT 5
select * from companies
id name
1 company 1
2 company 2
3 company 3
SELECT 3