有没有办法做我想要的“左交叉连接”?
即,是否有一种方法可以指定 CROSS JOIN ON,但在结果中为左侧的每一行至少返回一行,当右侧表不包含匹配项时,对右侧列使用空值?
这个查询有效
SELECT QMC.HAUSKEY, t1.STRNAME, t2.HAUS_NR
FROM SWOPS.MIGR.QMCAddresses QMC
CROSS JOIN (SELECT STRNAME FROM SWOPS.MIGR.EB_DICT_STREET_QMC WHERE FK=8055909) t1
CROSS JOIN (SELECT HAUS_NR FROM SWOPS.MIGR.EB_DICT_HAUSNR_QMC WHERE FK=8055909) t2
WHERE 1=1
AND QMC.HAUSKEY=8055909
ORDER BY HAUSKEY, t1.STRNAME, t2.HAUS_NR
Run Code Online (Sandbox Code Playgroud)
但是,当我用列引用 QMC.HAUSKEY 替换 CROSS JOIN 子查询中的常量 8055909 时,查询报告错误
Msg 4104, Level 16, State 1, Line 56 The multi-part identifier "QMC.HAUSKEY" could not be bound.
这是为什么?
背景:
QMCAddresses 包含建筑物及其地址
EB_DICT_STREET_QMC 包含 QMCAddresses 中地址的街道名称的可能变体
EB_DICT_STREET_HAUSNR 包含 QMCAddresses 中地址的门牌号的可能变化
我想做的是为每个建筑物地址创建一个笛卡尔积,其中包含其街道名称的所有可能变体和门牌号的所有可能变体。
例如