【发布时间】:2021-10-21 20:50:22
【问题描述】:
我想从 1 个或多个表中获取与连接条件匹配的结果。
我希望查询只返回颜色为蓝色和白色且品牌为 my_brand_1 的产品
这是我的小提琴:
https://www.db-fiddle.com/f/urA3kbd9JeYed7xGUEWref/2
CREATE TABLE colors (
prodoct_id CHAR(250),
name CHAR(250)
);
INSERT INTO colors (prodoct_id, name) VALUES ('prodoct_1', 'blue');
INSERT INTO colors (prodoct_id, name) VALUES ('prodoct_1', 'white');
INSERT INTO colors (prodoct_id, name) VALUES ('prodoct_2', 'blue');
INSERT INTO colors (prodoct_id, name) VALUES ('prodoct_2', 'green');
CREATE TABLE brands (
prodoct_id CHAR(250),
name CHAR(250)
);
INSERT INTO brands (prodoct_id, name) VALUES ('prodoct_1', 'my_brand_1');
INSERT INTO brands (prodoct_id, name) VALUES ('prodoct_2', 'my_brand_2');
CREATE TABLE prodocts (
prodoct_id CHAR(250)
);
INSERT INTO prodocts (prodoct_id) VALUES ('prodoct_1');
INSERT INTO prodocts (prodoct_id) VALUES ('prodoct_2');
SELECT
prodocts.prodoct_id
FROM
prodocts
LEFT OUTER JOIN
colors
ON (colors.name = 'blue' AND prodocts.prodoct_id = colors.prodoct_id)
AND (colors.name = 'white' AND prodocts.prodoct_id = colors.prodoct_id)
LEFT OUTER JOIN
brands
ON (brands.name = 'my_brand_1' AND brands.prodoct_id = colors.prodoct_id)
【问题讨论】:
-
这是一个非常奇怪的数据库布局,产品表不应该是品牌和颜色的关键,而不是相反吗?是否有一个原因?在产品中添加颜色和品牌会更有意义
-
否,因为您可以拥有超过 1 种颜色或品牌
标签: sql postgresql