改进此查询以从不同的表中获取数据

时间:2014-05-10 09:40:28

标签: mysql sql database

这是我的情景。我有一个带有字段类型的事件表,值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我希望查询根据表返回不同的字段值。在示例表中,食谱具有描述字段,而食物则没有。有可能吗?

请帮助我!

1 个答案:

答案 0 :(得分:1)

您可以使用COALESCE获取第一个非NULL列:

SELECT a.*, 
   COALESCE(b.name, c.name), 
   COALESCE(b.field1, c.field1),
   COALESCE(b.field2, c.field2)
FROM events a
...