Я хочу создать таблицу контактов, которую можно использовать позже. Таким образом, структура:Несколько JOIN по запросу
table contact: id, contact_type
table contact_meta : id, contact_id, meta_key, meta_value
Этот вопрос является плохой практикой? (Более 10 присоединиться?)
select c.id,
cm1.meta_value as name,
cm2.meta_value as email,
cm3.meta_value as bussiness_phone
from contact as c
left join contact_meta as cm1 on (cm1.contact_id = c.id)
left join contact_meta as cm2 on (cm2.contact_id = c.id)
left join contact_meta as cm3 on (cm3.contact_id = c.id)
where c.contact_type = 'supplier' and
cm1.meta_key = 'name' and
cm2.meta_key = 'email' and
cm3.meta_key = 'bussiness_phone' ORDER BY c.id DESC
У вас нет трех объединений, а не десять? – BenM
Ну, это плохая практика, потому что EAV лучше избегать в реляционных базах данных, но иногда нет альтернативы, и в этом случае обычным подходом является принятие синтаксиса MAX (CASE WHEN THEN END). Он более короткий (и, вероятно, быстрее). Кроме того, как и у вас есть, в том числе условия в предложении WHERE будут исключать результаты NULL, которые, вероятно, вам не нужны. – Strawberry
@BenM, будет десять – user2577399