这个Mysql条件连接可能吗?

发布于 2024-10-26 07:28:51 字数 684 浏览 1 评论 0原文

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

我想根据数据库中字段的值创建一个条件联接。例如,如果值为 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,则从页表连接?

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

任何帮助将不胜感激。

谢谢

I have done a bit of searching here but cannot come up with an answer so I wanted to ask if this was possible...

I want to create a conditional join based on the value of field in the database. So for example if the value is 1 then join one table if the value is 2 then join a different table.

Here is some sample data I have to work with:

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

So the templates table contains all the generic template information and the other tables contins information specific to the template type.

Is it possible to create a conditional mysql join so if the type in the templates table is 1 then from the email table and if the type is 2 then join from the page table?

If not could anybody suggest a better database design for the templates?

Any help would be appreciated.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

┾廆蒐ゝ 2024-11-02 07:28:51
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))
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

The double left joins will show all templates even if it cannot be matched from either table (depending on type). Otherwise if it must exist in the template table representing the type, then

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))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文