这是我的情景。我有一个带有字段类型的事件表,值1 =食物,2 =食谱。简化,我的事件表有这样的结构:
id | entity_id | user_id | type | timestamp | field1 | ... field n
字段" entity_id"是指来自"实体"的独特自动增量值。表。食物和食谱表结构非常相似,包含entity_id和user_id字段。
我想要的是从最后10个寄存器的表事件中获取所有公共数据,并根据表事件的类型值获取相应表的一些所需字段。到目前为止,我已经通过此查询实现了一些非常相似但不完全符合我要求的内容:
SELECT a.*, b.name, b.field1, b.field2, c.name, c.field1, c.field2
FROM events a
LEFT JOIN foods b ON b.entity_id = a.entity_id
LEFT JOIN recipes c ON c.entity_id = a.entity_id
ORDER BY timestamp DESC LIMIT 10
此allways返回所有表的所有字段,当字段不是此特定寄存器的类型时,返回NULL值。 所以我想得到所有事件字段表,以及相应表的name,field1,field2。
修改
这是sqlfiddle sqlfiddle.com/#!2/18d45/9我希望查询根据表返回不同的字段值。在示例表中,食谱具有描述字段,而食物则没有。有可能吗?
请帮助我!
答案 0 :(得分:1)
您可以使用COALESCE获取第一个非NULL列:
SELECT a.*,
COALESCE(b.name, c.name),
COALESCE(b.field1, c.field1),
COALESCE(b.field2, c.field2)
FROM events a
...