使用joiner表从表中选择价格/尺寸

时间:2017-04-02 12:40:59

标签: sql postgresql join subquery

我正在尝试创建一个产品页面,其中显示了产品信息以及价格和尺寸。每种产品都有多种价格和尺寸。

我有多张桌子(产品,尺寸,价格),而且我正在使用" joiner"只有那些表作为外键的表。这是我最困惑的地方。

SCHEMA

CREATE TABLE products (
  id SERIAL PRIMARY KEY,
  name TEXT,
  description TEXT,
);

CREATE TABLE sizes (
  id SERIAL PRIMARY KEY,
  height INT,
  width INT,
  garmentSize TEXT
);

CREATE TABLE prices (
  id SERIAL PRIMARY KEY,
  price INT
);  

CREATE TABLE product_price_size (           --joiner table
  id SERIAL PRIMARY KEY, 
  productId INTEGER REFERENCES products(id),
  priceId INTEGER REFERENCES prices(id),
  sizeId INTEGER REFERENCES sizes(id)
);


INSERT INTO products (name, description)
VALUES ('Take A Hike', 'Take A Hike vinyl decal');
INSERT INTO products (name, description)
VALUES ('Wanderlust', 'Wanderlust vinyl decal');

INSERT INTO prices (price) VALUES (4);
INSERT INTO prices (price) VALUES (6);
INSERT INTO prices (price) VALUES (8);

INSERT INTO sizes (height, width, garmentSize) VALUES (3, 3, null);
INSERT INTO sizes (height, width, garmentSize) VALUES (4, 5, null);
INSERT INTO sizes (height, width, garmentSize) VALUES (7, 2, null);

INSERT INTO product_price_size (productId, priceId, sizeid) VALUES (1, 1, 1);
INSERT INTO product_price_size (productId, priceId, sizeid) VALUES (1, 2, 2);
INSERT INTO product_price_size (productId, priceId, sizeid) VALUES (1, 3, 3);
INSERT INTO product_price_size (productId, priceId, sizeid) VALUES (2, 2, 3);
INSERT INTO product_price_size (productId, priceId, sizeid) VALUES (2, 2, 2);
INSERT INTO product_price_size (productId, priceId, sizeid) VALUES (2, 1, 3);

我需要让每个产品都显示出与其相关价格的多种尺寸,我不确定如何完成。我使用Angular来到"mysite.com/products/2",在这个例子中从产品表中获取第二个产品,所以如果我当前转到产品页面,会出现错误,因为目前有三个"产品.id" s引用产品ID 2。

QUERY

SELECT products.name, prices.price, sizes.height, sizes.width FROM products
INNER JOIN product_price_size ON products.id = product_price_size.productId
INNER JOIN prices ON prices.id = product_price_size.priceId
INNER JOIN sizes  ON sizes.id  = product_price_size.sizeId

我想我可能需要一个子查询,但我承认我迷失了这个。

Please see SQL Fiddle here

我希望这不会让人感到困惑,对于我这样做的任何想法或更好的想法都非常感激。谢谢!! 基思

0 个答案:

没有答案