这个Mysql条件连接是否可行?

时间:2011-03-27 02:37:56

标签: mysql database-design

我在这里做了一些搜索,但无法得出答案所以我想问这是否可能......

我想根据数据库中字段的值创建条件连接。因此,例如,如果值为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,那么从页表加入?

如果没有人可以为模板建议更好的数据库设计?

任何帮助都将不胜感激。

由于

1 个答案:

答案 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))