【发布时间】:2013-04-19 11:42:59
【问题描述】:
我需要实现一个数据继承逻辑,基于动态树,固定深度为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 将首先返回非 null。 就我而言,如果该行存在,我想返回它的值,无论它是否为空。
【问题讨论】:
标签: sql join conditional