使用嵌套的IFNULL检查沿互斥路径的表?

时间:2018-06-25 14:54:15

标签: sql database db2

我有一个可能在三个不同表中的字段。第一个表是存档。尽管归档文件应该会随着字段的变化而更新,但这种情况不会发生的可能性为非零。因此,我想搜索其他两个表,其中的字段是互斥的(从第二个表连接到第三个表后清除)。

在将这些表一起使用外部联接之后,在我的最终select语句中,我正在想像这样实现select语句来解决此问题:

SELECT Field IFNULL(Table2, IFNULL(Table3, Table1))

第二个IFNULL的目的是,如果由于某种原因而不是由于错误而存在,则存档中可能会包含该信息(表明有问题)。

对于这个我遗失的问题是否有更优雅的解决方案?我对SQL比较陌生,因此对最佳实践并不十分熟悉。我认为由于已经加入了Table的1 2和3,因此该功能不会占用大量资源,但是我对此并不乐观。

此字段也用于将表连接在一起,如果不在该表中,那么根据我的查询条件,该表上将不存在任何记录。我的计划是将其用于几个不同的领域。

这最终将出现在参数化的预处理语句中,该语句用于在前端实现搜索功能。

1 个答案:

答案 0 :(得分:5)

COALESCE()比嵌套的IFNULL()更优雅:

SELECT COALESCE(Table2.field, Table3.field, Table1.field) as Field

假设field从未为NULL,这可能是最好的方法。如果这是一个有效值,那么逻辑可能会比较麻烦。