2

我正在尝试考虑如何通过连接解决此查询,但目前正在苦苦挣扎。

了解我想要做什么的最好方法是查看我写的原始查询,它显然既不起作用也永远不会起作用。

SELECT * 
FROM shop_product_properties
WHERE name = 'Insert Size'
    AND product_id IN (
    SELECT DISTINCT product_id
    FROM shop_product_properties
        WHERE ((LOWER(name) = 'first choice material'
        AND value = 'Aluminium') AND (LOWER(name) = 'insert style' AND value = 'CCGT'))
);

我意识到我可能需要在同一张桌子上连接来解决这个问题。我只是不清楚从哪里开始。

4

1 回答 1

0
SELECT  spp.*
FROM    (
        SELECT  product_id
        FROM    shop_product_properties
        WHERE   (name, value) = ('first_choice_material', 'Aluminum')
                OR
                (name, value) = ('insert style', 'CCGT')
        GROUP BY
                product_id
        HAVING  COUNT(*) = 2
        ) q
JOIN    shop_product_properties spp
ON      (spp.product_id, spp.name) = (q.product_id, 'Insert Size')

确保您有一个唯一的索引,(name, product_id)以便它快速正确地工作。

于 2013-09-19T22:47:30.480 回答