MySQL连接在同一个表上两次

时间:2013-09-19 22:07:02

标签: mysql

我正在考虑如何使用连接解决此查询,但目前正在努力。

理解我要做的事情的最好方法是查看我写的原始查询,这显然既不起作用也不会起作用。

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'))
);

我意识到我可能需要在同一个表上使用连接来解决这个问题。我不知道从哪里开始。

1 个答案:

答案 0 :(得分: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)上有唯一索引,以便快速正确地工作。