gpt4 book ai didi

SQL 条件/案例连接/多态关联?

转载 作者:行者123 更新时间:2023-12-04 17:59:03 28 4
gpt4 key购买 nike

我正在尝试实现类似于 Ruby on Rails 的多态关系的东西。
我有以下三个表:

事件
用户
组织

事件可以由用户或组织拥有,因此我的事件表包括以下列:owner_type 和 owner_id。

我可以通过内部连接和 where 子句轻松列出属于用户或组织的所有事件,但是,有没有办法根据 owner_type 列的值使连接表有条件,从而允许将所有事件一起列出,无论所有者类型如何?

我希望这是有道理的。

任何建议表示赞赏。

谢谢。

最佳答案

您不能使连接表有条件,因此在这种情况下,您必须将事件连接到用户和组织,并使用合并将公共(public)字段(例如名称)合并在一起。

select e.id, coalesce(u.name, o.name) owner_name
from events e
left join users u on e.owner_id = u.id and e.owner_type = 'user'
left join organisations o on e.owner_id = o.id and e.owner_type = 'org'

但是,您可以考虑创建一个包含用户和组织的所有者表,其结构类似于 (id, type, org_id, name, ...)。这只需要一个连接,但可能会使您的架构的其他区域复杂化,例如。组织的用户成员资格。

另一种方法是将用户和组织表联合在一起,然后从事件中加入一次。

关于SQL 条件/案例连接/多态关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2333501/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com