混合完全和左连接的A,B和C之间的SQL关节

Val*_*n C 8 sql sql-server

我想知道是否有更好的方法在下面的例子中创建我的左连接

SELECT TOP 10 COALESCE(A.COD_PRODUCT, B.COD_PRODUCT),
              COALESCE(A.COD_FAMILY, B.COD_FAMILY),
              COALESCE(A.DATE_EXTRACT, B.DATE_EXTRACT),
              A.MASS
              B.VOLUME
              C.PRICE
FROM FIRSTTABLE A
FULL JOIN SECONDTABLE B
     ON B.COD_PRODUCT = A.COD_PRODUCT
     AND B.COD_FAMILY = A.COD_FAMILY
     AND B.DATE_EXTRACT = A.DATE_EXTRACT
LEFT JOIN THIRDTABLE C
     ON C.COD_PRODUCT = COALESCE(A.COD_PRODUCT, B.COD_PRODUCT)
     AND C.COD_FAMILY = COALESCE(A.COD_FAMILY, B.COD_FAMILY)
     AND C.DATE_EXTRACT = COALESCE(A.DATE_EXTRACT, B.DATE_EXTRACT)
Run Code Online (Sandbox Code Playgroud)

这种关节需要很长时间,我怀疑它是非常昂贵和可以改进的

编辑:我想在视图中改进此SELECt FROM JOIN语句.

clo*_*afe 0

将执行计划与此替换连接进行比较:

LEFT JOIN THIRDTABLE C
     ON (C.COD_PRODUCT = A.COD_PRODUCT or C.COD_PRODUCT = B.COD_PRODUCT)
     AND (C.COD_FAMILY = A.COD_FAMILY or C.COD_FAMILY = B.COD_FAMILY)
     AND (C.DATE_EXTRACT =A.DATE_EXTRACT or C.DATE_EXTRACT = B.DATE_EXTRACT)
Run Code Online (Sandbox Code Playgroud)