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