我需要实现一个基于动态树的数据继承逻辑,固定深度为 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)
我想要做的是检索对象列表,内部加入基于 owner_id/ouput_id 的 ObjectData,但如果不存在具有给定 output_id 的 ObjectData,则加入父输出的 ObjectData。
目前,使用我的基本 SQL 查询,如果 object_data 没有具有给定输出的条目,则不会返回它,这就是 INNER JOIN 的工作原理。
SELECT c.*, d.name FROM object c
INNER JOIN object_data d ON c.id = d.owner_id AND d.ouput_id = ?
我想要实现的是避免在完全继承数据时创建新的 object_data 条目,优化存储大小,并在添加新输出时避免大量插入。
我还必须能够对 object_data 字段进行查询。
谢谢 !
编辑:感谢Gordon Linoff,我认为coalesce 是我的问题的解决方案,但根据mysql doc,coalesce 将返回第一个非空值。就我而言,如果该行存在,我想返回它的值,无论它是否为空。