我在这里做了一些搜索,但无法得出答案所以我想问这是否可能......
我想根据数据库中字段的值创建条件连接。因此,例如,如果值为1,则在值为2时连接一个表,然后加入另一个表。
以下是我必须使用的一些示例数据:
Templates Table
template_id name type
1 Email Template 1
2 Page Template 2
Email Templates Table
template_id email_subject email_body
1 test test
Page Templates Table
template_id page_title page_desc
2 test page testing
因此,模板表包含所有通用模板信息,其他表包含特定于模板类型的信息。
是否可以创建一个条件mysql连接,所以如果模板表中的类型是1然后从电子邮件表中,如果类型是2,那么从页表加入?
如果没有人可以为模板建议更好的数据库设计?
任何帮助都将不胜感激。
由于
答案 0 :(得分:1)
select t.*,
coalesce(e.email_subject, p.page_title) title_or_subject,
coalesce(e.email_body, p.page_desc) body_or_desc
from Templates t
left join EmailTemplates e on t.type=1 and e.template_id=t.template_id
left join PageTemplates p on t.type=2 and p.template_id=t.template_id
双左连接将显示所有模板,即使它们无法从任何一个表中匹配(取决于类型)。否则,如果它必须存在于表示类型的模板表中,则
select t.*,
coalesce(e.email_subject, p.page_title) title_or_subject,
coalesce(e.email_body, p.page_desc) body_or_desc
from Templates t
left join EmailTemplates e on t.type=1 and e.template_id=t.template_id
left join PageTemplates p on t.type=2 and p.template_id=t.template_id
where ((t.type = 1 and e.template_id is not null)
or (t.type = 2 and p.template_id is not null))