gpt4 book ai didi

mysql按对值选择两列

转载 作者:行者123 更新时间:2023-11-28 23:57:32 26 4
gpt4 key购买 nike

我需要从 product_attributes 表中获取所有产品我有几对属性 id 和过滤器文本值。

这变得更加困难,因为文本存储为由 ; 分隔的数组。

       TABLE product_attribute

Fields product_id, attribute_id, text

SELECT pa.product_id FROM product_attribute as pa

WHERE (
(pa.attribute_id = '15' AND pa.text LIKE '%Male%' )
AND
(pa.attribute_id = '12' AND pa.text LIKE '%Cream%' )
)

显然这行不通,因为 attribute_id 不能同时为 12 和 15。

我不能在这里使用 OR 因为它会返回所有产品(所有男性)+(所有奶油)

而我只需要交集(男奶油)

这里有答案。 Alternative to Intersect in MySQL

我的变体:

SELECT  paz.product_id 
FROM (
( SELECT product_id FROM oc_product_attribute WHERE attribute_id = '15' AND text LIKE '%male%' )
UNION ALL
( SELECT product_id FROM oc_product_attribute WHERE attribute_id = '12' AND text LIKE '%creme%' )
) paz GROUP BY paz.product_id HAVING COUNT(*)=2

还有戈登·利诺夫的变体^

SELECT pa.product_id 
FROM product_attribute pa
GROUP BY pa.product_id
HAVING SUM(pa.attribute_id = '15' AND pa.text LIKE '%Male%') > 0 AND
SUM(pa.attribute_id = '12' AND pa.text LIKE '%Cream%');

最佳答案

我经常使用 group byhaving 来解决这些问题:

SELECT pa.product_id 
FROM product_attribute pa
GROUP BY pa.product_id
HAVING SUM(pa.attribute_id = '15' AND pa.text LIKE '%Male%') > 0 AND
SUM(pa.attribute_id = '12' AND pa.text LIKE '%Cream%') > 0;

HAVING 子句中的每个条件验证至少有一行满足特定条件。

关于mysql按对值选择两列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31213575/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com