我正在考虑如何使用连接解决此查询,但目前正在努力。
理解我要做的事情的最好方法是查看我写的原始查询,这显然既不起作用也不会起作用。
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'))
);
我意识到我可能需要在同一个表上使用连接来解决这个问题。我不知道从哪里开始。
答案 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)
上有唯一索引,以便快速正确地工作。