我有两张桌子,我还要加在一起。
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,那将是很好的.......
这可能吗?
所以我试图按col3的值返回col1和col2的每个可能组合。问题是当col3不包含col1,col2的特定组合时,我得到col3的空值...
答案 0 :(得分:1)
假设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
Cross join生成所涉及的表的笛卡尔积,检索可能在表2中找不到的Col3。
答案 1 :(得分:0)
LEFT JOIN将在右表中产生空值,其中左表中的Col1和Col2未找到匹配项。这是预期的行为。
如果您在编写其他查询时需要帮助,则必须发布数据结构和一些示例数据。
答案 2 :(得分:0)
只需切换表格(或使用正确的联接):
SELECT tab2.Col3, tab2.Col1, tab2.Col2 FROM
(SELECT distinct Col3, Col1, Col2 FROM Table2) tab2
LEFT JOIN
(SELECT distinct Col1,Col2 FROM Table1) tab1
ON tab2.Col2 = tab1.Col2 AND tab2.Col1 = tab1.Col1