检索4个表的完整外部联接中的可用标题

问题描述 投票:2回答:1

我需要合并4个不同属性表的输出。所有表具有不同的行数。目前,我有此查询:

    CREATE VIEW vw_Items

AS
SELECT   a.Countryname
        ,a.Itemname
        ,ISNULL(a.Colour,'None') as Colour
        ,ISNULL(b.Location,0) as Location
        ,ISNULL(c.Size,0) as Size
        ,ISNULL(d.Weight,0) as Weight

FROM ItemColour a

FULL OUTER JOIN ItemLocation b 
    ON a.Countryname = b.Countryname 
    AND a.Itemname= b.Itemname
FULL OUTER JOIN ItemSize c 
    ON a.Countryname = c.Countryname 
    AND a.Itemname= c.Itemname
FULL OUTER JOIN ItemWeight d 
    ON a.Countryname = d.Countryname 
    AND a.Itemname= d.Itemname

因此,问题在于表a中的NULL国家名称和项目名称,我认为我需要为此执行嵌套的CASE,但是有更好的方法来处理此问题吗?

谢谢。

sql tsql
1个回答
1
投票

我怀疑您可能想要:

SELECT ci.Countryname, ci.Itemname
       COALESCE(c.Colour, 'None') as Colour,
       COALESCE(l.Location, 0) as Location
       COALESCE(s.Size, 0) as Size
       COALESCE(w.Weight, 0) as Weight
FROM ((SELECT c.countryname, c.itemname
       FROM ItemColour c
      ) UNION  -- on purpose to remove duplicates
      (SELECT l.countryname, l.itemname
       FROM ItemLocation c
      ) UNION
      (SELECT s.countryname, s.itemname
       FROM ItemSize
      ) UNION
      (SELECT w.countryname, w.itemname
       FROM ItemWeight w
      ) 
     ) ci LEFT JOIN
     ItemColor c
     ON c.countryname = ci.countryname AND
        c.itemname = ci.itemname LEFT JOIN
     ItemLocation l
     ON l.countryname = ci.countryname AND
        l.itemname = ci.itemname LEFT JOIN
     ItemSize s
     ON s.countryname = ci.countryname AND
        s.itemname = ci.itemname LEFT JOIN
     ItemWeight w
     ON w.countryname = ci.countryname AND
        w.itemname = ci.itemname ;
© www.soinside.com 2019 - 2024. All rights reserved.