如何对查询执行OUTER JOIN

时间:2013-03-20 16:13:19

标签: sql ms-access oledb ms-access-2000

我不确定我的问题是否准确,所以我会解释一下情况。

我有两张桌子,我需要做一个左外连接来获取数据,即使没有匹配。我做了一个工作正常的查询,除了where语句中的一个歧视:

SELECT TableA.Type, SUM(TableB.HreReelles) AS HreReellesTotales, TableB.NoProjet_Short 
FROM TableA 
LEFT OUTER JOIN TableB ON TableA.IDType = TableB.IDType  
WHERE TableA.Categorie = 'Electrique' 
GROUP BY TableB.NoProjet_Short,TableA.Type

现在我意识到我还需要通过保留OUTER JOIN中的所有“TableA.Type”来获取特定项目的记录,即使其他表中没有匹配项也是如此。如果我只添加“AND”语句,它会从返回的记录中删除它们。我会在必要时发布截图;)。

哦,我需要在最终确定时把它放在OleDbCommand中。

由于 西蒙

编辑:添加了图片。我不需要红色的东西,但我需要其余的包括空单元格(来自LEFT OUTER JOIN)。

Expected data

2 个答案:

答案 0 :(得分:3)

使用左连接查询,您应该在连接的on子句中的“right”表中过滤行。

SELECT TableA.Type, SUM(TableB.HreReelles) AS HreReellesTotales, TableB.NoProjet_Short 
FROM TableA 
LEFT OUTER JOIN TableB ON TableA.IDType = TableB.IDType  
  AND TableB.ColumnName = 'SomeValue'
WHERE TableA.Categorie = 'Electrique' 
GROUP BY TableB.NoProjet_Short,TableA.Type

答案 1 :(得分:1)

我认为你可能需要走很远的路:

SELECT TableA.Type, SUM(b.HreReelles) AS HreReellesTotales, 
       b.NoProjet_Short 
FROM TableA 
LEFT JOIN (SELECT * FROM TableB 
  WHERE TableB.ColumnName = 'SomeValue') b
ON TableA.IDType = b.IDType  
WHERE TableA.Categorie = 'Electrique' 
GROUP BY b.NoProjet_Short,TableA.Type