我有一个对象表、一个定义属性的表和一个包含对象属性值的表:
OBJECTS:
ID | ...
----+-----
1 | ...
2 | ...
ATTRIBUTES:
KEY | DEFAULT
-----+---------
a1 | xyz
a2 | abc
a3 | 123
OBJECT_ATTRIBUTES:
OBJECT_ID | KEY | VALUE
-----------+------+-------
1 | a1 | abcd
1 | a2 | xyzw
2 | a3 | 12345
所以每个对象都可以为其属性定义值,否则default
应该使用 for 该属性。
现在我需要一个选择来连接所有具有所有属性的对象,替换default
任何时候OBJECT_ATTRIBUTES
记录不存在:
INTENDED QUERY RESULT:
OBJECT_ID | ... | KEY | VALUE
-----------+------+------+-------
1 | ... | a1 | abcd
1 | | a2 | xyzw
1 | | a3 | 123 <- filled in default
2 | | a1 | xyz <- filled in default
2 | | a2 | abc <- filled in default
2 | | a3 | 12345
我怎样才能在 SQL 中做到这一点?
在首屏:现在我只选择
SELECT * FROM OBJECT LEFT JOIN OBJECTS_ATTRIBUTES ON ID = OBJECT_ID
但后来我必须手动填写空白。