Skip to content

Instantly share code, notes, and snippets.

@ladayaroslav
Created August 29, 2017 19:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ladayaroslav/73600d49943d8c2b6f6216abe5697662 to your computer and use it in GitHub Desktop.
Save ladayaroslav/73600d49943d8c2b6f6216abe5697662 to your computer and use it in GitHub Desktop.
CREATE TABLE item_sizes(
size_id text PRIMARY KEY
);
INSERT INTO item_sizes VALUES ('small'), ('large');
CREATE TABLE warehouses(
warehouse_id SERIAL PRIMARY KEY,
name text NOT NULL
);
INSERT INTO warehouses(name) VALUES ('CA'), ('NY'), ('TX');
CREATE TABLE warehouses_sizes(
warehouse_id int NOT NULL REFERENCES warehouses,
size_id text NOT NULL REFERENCES item_sizes,
PRIMARY KEY(warehouse_id, size_id)
);
INSERT INTO warehouses_sizes(warehouse_id, size_id) VALUES
(1, 'small'),
(1, 'large'),
(2, 'small'),
(3, 'large');
CREATE TABLE items(
item_id SERIAL PRIMARY KEY,
name text NOT NULL,
item_size text NOT NULL REFERENCES item_sizes
);
INSERT INTO items(name, item_size)
VALUES ('lamp', 'small'), ('sofa', 'large'), ('chair', 'large');
--------------------------------------
SELECT i.*
FROM items AS i
WHERE EXISTS (
SELECT 1
FROM warehouses_sizes AS ws
JOIN warehouses AS w
ON w.warehouse_id = ws.warehouse_id
WHERE ws.size_id = i.item_size
AND w.name = 'CA'
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment