MySQL запрос количества записей в основной таблице с несколькими атрибутами во второй таблице

0

Мне нужна помощь в построении запроса 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';
  • 1
    Пожалуйста, смотрите минимальный воспроизводимый пример . Покажите структуру таблицы.
  • 1
    Вы не можете ожидать, что мы волшебным образом узнаем структуру вашей таблицы, взаимосвязь таблицы, список столбцов в каждой таблице. Мы не волшебники. Дайте структуру таблицы, ввод, ожидаемый результат. Вот руководство, как задать вопрос. stackoverflow.com/help/how-to-ask
Теги:

2 ответа

0

Вы можете использовать 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.

0

Вы можете присоединиться к таблице снова и снова для каждого атрибута. Это делает соединения более сложными, но 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; 

Ещё вопросы

Сообщество Overcoder
Наверх
Меню