You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改SQL查询语句筛选指定属性值的商品并保留美化属性输出

最终修改后的查询语句(完全保留原有格式化输出逻辑)

SELECT
    title,
    stock,
    price,
    (
        SELECT GROUP_CONCAT(p.title, ': ', pv.value SEPARATOR ', ') 
        FROM product_property_value pv 
        INNER JOIN property p on pv.property_id = p.id WHERE pv.product_id = product.id
    ) property_values
FROM product
WHERE 
-- 校验颜色为Red
EXISTS (
    SELECT 1 FROM product_property_value pv1
    INNER JOIN property p1 ON pv1.property_id = p1.id
    WHERE pv1.product_id = product.id AND p1.code = 'color' AND pv1.value = 'Red'
)
-- 校验宽度为4或5
AND EXISTS (
    SELECT 1 FROM product_property_value pv2
    INNER JOIN property p2 ON pv2.property_id = p2.id
    WHERE pv2.product_id = product.id AND p2.code = 'width' AND pv2.value IN ('4','5')
)
-- 校验高度为5
AND EXISTS (
    SELECT 1 FROM product_property_value pv3
    INNER JOIN property p3 ON pv3.property_id = p3.id
    WHERE pv3.product_id = product.id AND p3.code = 'height' AND pv3.value = '5'
);

说明

因为属性采用行式存储,每个属性对应商品关联表的一条独立记录,所以用EXISTS子查询分别校验三个属性条件,不会和原有拼接属性的子查询产生冲突,完全保留原有输出格式。
如果你确认property表的id固定不会修改,可以去掉子查询中关联property表的逻辑,直接校验property_id,性能会更高,比如颜色校验可以简化为:

EXISTS (SELECT 1 FROM product_property_value pv1 WHERE pv1.product_id = product.id AND pv1.property_id = 1 AND pv1.value = 'Red')

内容的提问来源于stack exchange,提问作者Lilly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 02:27:04