一对多连接,如果 "Many" table 列中的任何值 = 1,则在 "One" table = '1' 中设置一个标志,其中 One.ID = Many.ID

One to Many join, if any values in the "Many" table column = 1 then set a flag in the "One" table = '1' where One.ID = Many.ID

我有2张桌子。 "One Table" 具有不同的唯一 LoadID 和 true/false 标志(1 或 0)。 "Many Table" 有多个项目,这些项目属于一个负载。此外,每个 Item 都有一个 true 或 false 标志。

我需要做一个 select,如果 "Many Table" 中的任何标志对于特定 LoadID 为真,那么我想 select 单个 LoadID 的标志为真在 "One table "

最终结果应该是每个 LoadID 有 1 个不同的记录

关于如何在繁重的事务场景中有效实现这一点的任何提示?

到目前为止我的查询和结果集

Select Distinct L.Hazmat AS L_Hazmat, "DM_Hazmat" =
CASE
WHEN L.Hazmat = 0 and I.Hazmat = 0 THEN 0
WHEN L.Hazmat = 0 and I.Hazmat = 1 THEN 1
ELSE L.Hazmat
END
FROM tblLoads L with (NOLOCK)
INNER JOIN tblLoadItems I with (NOLOCK) ON L.LoadGuid = I.LoadGuid
WHERE L.LoadGuid = 'EB09E71B-82F0-41DB-BCBC-03896EE04789' 

L_Hazmat DM_Hazmat 0 0 0 1

我建议如下:

 Select "L_Hazmat" = L.Hazmat, 
        "DM_Hazmat" = 
             CASE 
             WHEN EXISTS (
                  SELECT  1
                  FROM    tblLoadItems I with (NOLOCK) 
                  WHERE   I.Hazmat = 1
                     AND  L.LoadGuid = I.LoadGuid
                  )
             THEN 1
             ELSE 0
             END
 FROM tblLoads L with (NOLOCK)

这将 return 你 L.Hazmat 的值以及 1 如果 anyI.Hazmat 与同样的 LoadGuid 值是 1。而且它不需要分组或 DISTINCT,这可能会使其性能更好。