LEFT JOIN后填写缺失值的最佳方法?

时间:2014-04-14 13:59:01

标签: mysql sql performance join data-structures

我将简化我的问题以使核心问题清晰:我有一个TableA INNER JOIN TableB LEFT JOIN TableC的查询。

左连接的结果是在结果集中,其中两列可能在某些行中具有NULL值。要填写缺少的值,我必须遍历结果集并查询具有数据的另一个数据库(因此无法加入 首先)。

我的问题是:当我们需要在左连接后填充结果集的空值时,是否有标准/优化方法?

2 个答案:

答案 0 :(得分:3)

您可以改为使用COALESCE(...)MSDN - COALESCE)。

您的查询将如下所示:

select a, b, COALESCE(TableB.c, 'replacement value')
from TableA INNER JOIN TableB LEFT JOIN TableC ...

为替换表添加另一个联接,并在NULL函数中放置要替换COALESCE值的列,而不想使用静态值。

答案 1 :(得分:1)

"要填写缺失值,我必须遍历结果集并查询另一个拥有数据的数据库(因此首先无法加入)。"

考虑另一种解决方案,然后循环填写数据。

1.同一台服务器上的另一个数据库==简单。只需使用db.schema限定名称加入。

  1. 另一台服务器上的另一个数据库,仍可能取决于您的网络拓扑。然后使用server.db.schema限定名称加入。

  2. 如果您经常需要这样做,请考虑复制所需的数据。