Мне нужна помощь в построении запроса MYSQL:
В основной таблице указаны имя и адрес лица для продажи автомобиля.
В таблице атрибутов (второй) перечислены атрибуты автомобиля.
Как указать количество продавцов в ГЛАВНОЙ ТАБЛИЦЕ, где таблица атрибутов COLOR - КРАСНАЯ, а YEAR - 2015, а PRICE - менее 15 000, а адрес клиента - Columbus?
select count('master_id')
from 'customers' c
left join 'attributes' a
on c.master_id = a.master_id
where (
a.name = 'color' and a.value = 'red' and
a.name = 'year' and a.value = '2015' and
a.name = 'price' and a.value > '15000' and
c.city = 'Columbus';
Вы можете использовать group by
и having
:
select count(*)
from (select master_id
from 'customers' c left join
'attributes' a
on c.master_id = a.master_id
where (name, value) in ( ('color', 'red'), ('year', '2015'), ('price', '15000') and
c.city = 'Columbus'
group by a.master_id
having count(distinct name) = 3
) x;
Обратите внимание, что это использует кортежи для упрощения предложения where
.
Вы можете присоединиться к таблице снова и снова для каждого атрибута. Это делает соединения более сложными, но WHERE
проще. Этот запрос основан на предположении о вашем хранилище данных, поскольку он недоступен в вопросах.
SELECT COUNT(c.*)
FROM 'customers' c
LEFT JOIN 'attributes' aclr
ON aclr.name = 'color'
AND c.master_id = aclr.master_id
LEFT JOIN 'attributes' ayr
ON ayr.name = 'year'
AND c.master_id = ayr.master_id
LEFT JOIN 'attributes' aprc
ON aprc.name = 'price'
AND c.master_id = aprc.master_id
WHERE aclr.value = 'red'
AND ayr.value = '2015'
AND aprc.value > '15000'
AND c.city = 'Columbus'
GROUP BY c.master_id;