SQL条件联接,数据继承

SQL条件联接,数据继承,sql,join,conditional,Sql,Join,Conditional,我需要实现一个基于动态树的数据继承逻辑,深度固定为3 Output 1 --Output 1.1 --Output 1.2 ----Ouptut 1.2.1 ----Output 1.2.2 --Output 1.3 Ouput 2 -- Output 2.1 -- Output 2.2 -- etc. 我有一个对象定义如下: Object -id -createdAt 以及附加到对象的数据 ObjectData -owner_id (fk to the object) -output_id

我需要实现一个基于动态树的数据继承逻辑,深度固定为3

Output 1
--Output 1.1
--Output 1.2
----Ouptut 1.2.1
----Output 1.2.2
--Output 1.3
Ouput 2
-- Output 2.1
-- Output 2.2
-- etc.
我有一个对象定义如下:

Object
-id
-createdAt
以及附加到对象的数据

ObjectData
-owner_id (fk to the object)
-output_id (fk to the output)
-name (this is the real data)
我试图做的是检索一个对象列表,在所有者\ id/ouput \ id上内部联接ObjectDatabase,但如果不存在具有给定output \ id的ObjectData,则联接父输出的ObjectData

目前,在我的基本SQL查询中,如果对象_数据没有具有给定输出的条目,则不会返回,这就是内部联接的工作方式

SELECT c.*, d.name FROM object c
INNER JOIN object_data d ON c.id = d.owner_id AND d.ouput_id = ?
我试图实现的目标是避免在数据完全继承时创建新的object_数据条目,优化存储大小,以及在添加新输出时避免大量插入

我还必须能够对object_数据字段的查询进行排序

谢谢大家!

编辑: 多亏了Gordon Linoff,我认为coalesce可以解决我的问题,但根据mysql文档,coalesce将返回第一个非null值。
在我的例子中,如果行存在,我想返回它的值,不管它是否为null。

我想我理解您的要求。以下SQL连接对象数据和父对象数据,然后在
select
语句中选择它们:

select o.*, coalesce(od.name, od_parent.name)
from object o left outer join
     objectdata od_o
     on od_o.id = o.id left outer join
     objectdata od_parent
     on od_parent.id = o.parent_id

对于数据库引擎来说,这似乎是不必要的工作。但是大多数引擎都经过高度优化,可以将表连接在一起,因此性能可能不是问题——特别是如果表上有正确的索引。

谢谢您的回答,这似乎是一个很好的解决方案!如果一行存在,但该值为空,它会返回父数据吗?那不是我想要的。