我想创建一个可以稍后使用的联系人表。所以结构:查询中的多个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