我将简化我的问题以使核心问题清晰:我有一个TableA INNER JOIN TableB LEFT JOIN TableC
的查询。
左连接的结果是在结果集中,其中两列可能在某些行中具有NULL值。要填写缺少的值,我必须遍历结果集并查询具有数据的另一个数据库(因此无法加入 首先)。
我的问题是:当我们需要在左连接后填充结果集的空值时,是否有标准/优化方法?
答案 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限定名称加入。
另一台服务器上的另一个数据库,仍可能取决于您的网络拓扑。然后使用server.db.schema限定名称加入。
如果您经常需要这样做,请考虑复制所需的数据。