У меня есть эта таблица
itemname property value
------------------------------------------
A size big
A color red
B size big
B color blue
C size small
C color blue
D size small
D color blue
E size small
E color blue
Я создаю список примерно так: SELECT property,value,COUNT(itemname),GROUP_CONCAT(itemname) FROM table GROUP BY property,value
property value count
---------------------------------
size big 2 (A,B)
size small 3 (C,D,E)
color red 1 (A)
color blue 4 (B,C,D,E)
Я хочу отфильтровать элементы, которые БОЛЬШИЕ && МАЛЕНЬКИЕ && СИНИЕ, какМогу ли я достичь этого результата?(Я ДОЛЖЕН быть конкретным в отношении свойства при обращении к значению для фильтрации)
`SELECT
property,value,COUNT(itemname),GROUP_CONCAT(itemname)
FROM
table
GROUP BY
property,value
HAVING
( property IN ('size') && value IN ('big','small') )
&&
( property IN ('color') && value IN ('blue') )`
Но это не имеет никакого результата, потому что оно пытается сопоставить строку с размером и цветом одновременно?Мой желаемый вывод в этом случае - избегать элемента A, потому что он красный, как этот:
property value count
---------------------------------
size big 1 (B) A not here, because it is red
size small 3 (C,D,E) no change because all are blue
color red 0 (A) no red is selected, so this row should be 0 or not listed at all
color blue 4 (B,C,D,E) all the 4 are big or small and blue
Пожалуйста, кто-нибудь поможет мне в этом, я потерял 2 дня, задаваясь вопросом о решении.Я мог бы использовать CASE в сочетании с HAVING?Или я должен как-то обратиться к ГДЕ?
Примечание: Эта таблица на самом деле не настоящая, но если этот вопрос можно решить, я могу использовать ее в своих реальных таблицах, которые намного сложнее.