Sql 选择加入所有匹配项
表:Sql 选择加入所有匹配项,sql,Sql,表: CREATE TABLE product_option ( id bigint NOT NULL, option_type character varying(255) NOT NULL, value character varying(255) NOT NULL, product_id bigint, CONSTRAINT product_option_pkey PRIMARY KEY (id ), CONSTRAINT fk_product FOREIGN KE
CREATE TABLE product_option
(
id bigint NOT NULL,
option_type character varying(255) NOT NULL,
value character varying(255) NOT NULL,
product_id bigint,
CONSTRAINT product_option_pkey PRIMARY KEY (id ),
CONSTRAINT fk_product FOREIGN KEY (product_id)
REFERENCES product (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE CASCADE
)
用户可以搜索具有选项列表的产品。
即
查找具有以下选项的产品:
BINDING_SIDE : BOTTOM
BINDING_SIDE : TOP
BINDING_TYPE : COIL_BINDING
结果应该只返回至少具有这三个选项的产品。(他们可以有更多的选项)您可以使用
HAVING
和条件SUM()
来获得:
SELECT product_id
FROM YourTable
GROUP BY product_id
HAVING SUM(CASE WHEN option_type = 'BINDING_SIDE' AND value = 'BOTTOM' THEN 1 ELSE 0 END) >= 1
AND SUM(CASE WHEN option_type = 'BINDING_SIDE' AND value = 'TOP' THEN 1 ELSE 0 END) >= 1
AND SUM(CASE WHEN option_type = 'BINDING_TYPE' AND value = 'COIL_BINDING' THEN 1 ELSE 0 END) >= 1
如果您可以使用重复的
选项\u类型、值
组合,则此选项无效:
Select
Product_id
From
Product_Options
Where
(Option_Type = 'BINDING_SIDE' and value = 'BOTTOM') Or
(Option_Type = 'BINDING_SIDE' and value = 'TOP') Or
(Option_Type = 'BINDING_TYPE' and value = 'BOTTOM') Or
Group By
Product_id
Having
Count(*) >= 3
试试这个代码
SELECT product_id
FROM product
group by product_id
having SUM(
(case when (option_type = 'BINDING_SIDE' and value = 'BOTTOM') then 1 else 0 end)
+ (case when (option_type = 'BINDING_SIDE' and value = 'TOP') then 1 else 0 end)
+ (case when (option_type = 'BINDING_SIDE' and value = 'COIL_BINDING') then 1 else 0 end)
) >=3
请将您的数据粘贴为文本,格式正确,并向我们展示您迄今为止使用的代码您迄今为止尝试了哪些代码我可以使用重复的选项\u类型-值组合,但不适用于一种产品。这确实有效。我想如果我在查询中输入产品id,我应该是好的。sql不起作用…:(那个sql不起作用:(对我起作用,你使用的是什么数据库?提示:你的比较是SUM(xxx)>1:-)哈哈,哇,更新为>=1。