我有一个字段可能在三个不同的表中。第一个表是一个存档;尽管存档应该随着字段的变化而更新,但这不可能发生。因此,我想搜索另外两个表,其中的字段是互斥的(从第二个表连接到第三个表后清除)。
在这些表一起使用外部连接之后的最后一个select语句中,我设想通过实现如下select语句来解决这个问题:
SELECT Field IFNULL(Table2, IFNULL(Table3, Table1))
第二个ifnull的目的是,如果由于某种原因,它不在任何一个错误,存档可能会有信息(指示一个问题)。
有没有更优雅的方法来解决我所缺少的这个问题?我对sql比较陌生,因此不太熟悉最佳实践。我认为这个函数不会非常耗费资源,因为已经加入了表的12和3,但我不确定。
此字段也用于将表连接在一起,如果不在该表中,我的查询标准将不存在该表中的记录。我的计划是把这个用于几个不同的领域。
这最终将出现在一个参数化的准备好的语句中,用于在前端实现搜索功能。
最佳答案
COALESCE()
比嵌套的要优雅一些:
SELECT COALESCE(Table2.field, Table3.field, Table1.field) as Field
这可能是最好的方法,假设
IFNULL()
永远不会field
。如果这是一个有效值,那么逻辑可能会更麻烦一些。关于sql - 使用嵌套的IFNULL检查沿互斥路径的表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51026380/