错误措辞标题我的歉意。SQL服务器 - 有条件加入任何表不为空
我试图加入一个表,其他两个表
MasterTable 子表 SubTableArchive
所以,MasterTable包含一个ID字段之一。 SubTable和SubTableArchive包含用于连接的MasterTableId字段。
但是,数据将永远存在于这些子表之一中。所以我只想加入到其中有数据的表中。
但我知道这样做的唯一途径是通过加入到两个并使用isnull在我选择的所有字段上,并且其读取(和写入)很快变得复杂。 尤其是因为一些字段已经被包裹在ISNULL的
SELECT M.Id, ISNULL(S.Field1, SA.field1), ISNULL(S.field2, SA.Field2),
SUM(CASE WHEN (ISNULL(S.Finished,SA.Finished)=1 AND ISNULL(ISNULL(S.ItemCode,SA.ItemCode),'')='') THEN 1 WHEN (ISNULL(S.Finished,SA.Finished)=0 AND ISNULL(ISNULL(S.AltItemCode,SA.AltItemCode),'')='') THEN 1 ELSE 0 END) AS SummaryField
FROM MAsterTable M
LEFT OUTER JOIN SubTable S ON S.MasterTableId = M.Id
LEFT OUTER JOIN SubTableArchive SA ON S.MasterTableId = M.Id
GROUP BY M.Id, ISNULL(S.Field1, SA.field1), ISNULL(S.field2, SA.Field2)
所以这是工作,但它不是漂亮。 这是一个样本,但真正的查询更长,更复杂。
我希望SQL可能有某种内置的条件加入功能。 有些事情要做,我想做的事情离开查询itslef有点友好。