Sql 左联接中缺少数据

Sql 左联接中缺少数据,sql,sql-server,left-join,Sql,Sql Server,Left Join,我有两张桌子,我把它们放在一起 SELECT Col3, tab1.Col1, tab1.Col2 FROM (SELECT Col1,Col2 FROM Table1 GROUP BY Col1,Col2) tab1 LEFT JOIN (SELECT Col3, Col1, Col2 FROM Table2 GROUP BY Col3, Col1, Col2) tab2 ON tab2.Col2 = tab1.Col2 AND tab2.Co

我有两张桌子,我把它们放在一起

SELECT Col3, tab1.Col1, tab1.Col2 FROM
    (SELECT Col1,Col2 
    FROM Table1
    GROUP BY Col1,Col2) tab1
LEFT JOIN
    (SELECT Col3, Col1, Col2
    FROM Table2
    GROUP BY Col3, Col1, Col2) tab2
ON tab2.Col2 = tab1.Col2 AND tab2.Col1 = tab1.Col1
对于表1中不存在于表2中的行,我返回一行,其中Col3为Null。因为我是基于Col3对数据进行分组的,所以如果我能以某种方式获得Col3的值而不是Null,那就太好了

这可能吗


所以我试图返回col1和col2的所有可能组合,每个col3的值。问题是,当col3不包含col1、col2的特定组合时,我将为col3获取空值…

左连接将在右表中生成空值,而在左表中找不到与col1和col2匹配的值。这是预期的行为

如果您需要帮助编写不同的查询,则必须发布数据结构和一些示例数据以供使用。

只需切换表(或使用右连接):


假设Col3是某种类别,并且是
category
表的主键,则可以执行以下操作:

select Category.Col3,
       tab1.Col1,
       tab1.Col2,
       sum (tab2.YourAggregate) SumOfSomething
 -- Take all categories
  from Category
 -- Cartesian product with Tabl1
 cross join Table1 tab1
 -- Find matching records in Table2, if they exist
  left join Table2 tab2
    on Category.Col3 = Tab2.Col3
   and Tab1.Col1 = Tab2.Col1
   and Tab1.Col2 = Tab2.Col2
 group by Category.Col3,
       tab1.Col1,
       tab1.Col2

生成相关表的笛卡尔积,检索表2中可能找不到的Col3。

为什么要使用
左联接
?是否确实要为Col1和Col2的每个组合显示Col3的所有可能值,生成表2中找不到(Col1、Col2、Col3)的零?如果你这样做了,你应该解释实际的表格。
select Category.Col3,
       tab1.Col1,
       tab1.Col2,
       sum (tab2.YourAggregate) SumOfSomething
 -- Take all categories
  from Category
 -- Cartesian product with Tabl1
 cross join Table1 tab1
 -- Find matching records in Table2, if they exist
  left join Table2 tab2
    on Category.Col3 = Tab2.Col3
   and Tab1.Col1 = Tab2.Col1
   and Tab1.Col2 = Tab2.Col2
 group by Category.Col3,
       tab1.Col1,
       tab1.Col2