我正在考虑如何使用连接来解决此查询,但目前正在苦苦挣扎。
了解我正在尝试做的事情的最佳方式是查看我编写的原始查询,它显然既行不通也永远不会行事。
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'))
);
我意识到我可能需要通过在同一张表上进行联接来解决这个问题。我只是不清楚从哪里开始。
最佳答案
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)
上有一个唯一索引,以便它快速正确地工作。
关于MySQL在同一张表上加入两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18905719/