【发布时间】:2018-06-25 14:54:14
【问题描述】:
我有一个可能位于三个不同表中的字段。第一个表是存档;尽管假定存档会随着字段的变化而更新,但这种情况不会发生的可能性非零。因此,我想搜索其他两个表,其中字段是互斥的(从第二个表连接到第三个表后清除)。
在对这些表一起使用外连接后的最后一个选择语句中,我想通过实现这样的选择语句来解决这个问题:
SELECT Field IFNULL(Table2, IFNULL(Table3, Table1))
第二个 IFNULL 的目的是,如果由于某种原因由于错误而不在其中,则存档可能会包含信息(表明存在问题)。
对于我缺少的这个问题,是否有更优雅的解决方案?我对 SQL 比较陌生,因此对最佳实践不是很熟悉。由于已经加入了表 1 2 和 3,我认为此功能不会占用太多资源,但我并不积极。
此字段还用于将表连接在一起,如果它不在该表中,则根据我的查询条件,该表中将不存在记录。我的计划是将其用于几个不同的领域。
这最终将出现在一个参数化的预处理语句中,用于在前端实现搜索功能。
【问题讨论】:
-
什么字段用于连接表格?如果它需要一个成本相当高的外连接,
-
它是多个字段的左外连接,该字段专门用于连接它们。如果此字段未显示,则这些表上将不存在记录。我最初的想法是在几个字段上实际使用它,同样的约束:没有这个字段存在,记录也将不存在,因此将其呈现为空。
-
如果您已经在使用外连接,则 ifnull 并不昂贵。总体而言,它还可以清楚地说明您在做什么。