外部编写的数据库有一些我希望在2个表中匹配的数据:
表A:
表B:
加入的唯一常见字段是ID1,但是,我真的希望所有数据都与ID2记录匹配。
加入ID1上的表格给出了以下结果:
| ID1 | ID2 | Type | Fld1 | Fld2 | Fld3 |
--------------------------------------------------------
| 1 | 1 | 1 | Data1 | Data1 | |
| 2 | 1 | 2 | | | Data1 |
| 3 | 2 | 1 | Data1 | Data1 | |
| 4 | 2 | 2 | | | Data1 |
我需要的是一个查询结果:
| ID1 | ID2 | Type | Fld1 | Fld2 | Fld3 |
--------------------------------------------------------
| ? | 1 | ? | Data1 | Data1 | Data1 |
| ? | 2 | ? | Data1 | Data1 | Data1 |
我把“?”对于ID1和Type字段,因为我不确定它们会合并到哪个结果(最终我不会对这两个字段感到困惑,我真的只想要ID2和3“Fld~”字段)。
实现这个目的的方法是什么?
接受回答后的其他说明:
正如Remou所建议的那样,在文本字段上使用聚合函数MAX并按照我想要使用的ID字段进行分组。但是,我在最初的插图中没有提到我也在过滤几个领域。
即使没有为查询选择这些字段,它们也需要在查询的设计视图中将其“total”函数设置为“Where”,以确保它们成为SQL WHERE
子句的一部分。默认情况下,设计视图会将它们设置为“分组依据”,这将它们放入HAVING
子句(不是我想要的)。
这是我到达的完整SQL,它给了我所需要的东西:
SELECT A.Learner_Id,
Max(B.AddLine1) AS Address1,
Max(B.AddLine2) AS Address2,
Max(B.AddLine3) AS Address3,
Max(B.AddLine4) AS Address4,
Max(A.PostCode) AS AddPostCode
FROM LearnerContact As A LEFT JOIN PostAdd As B ON A.LearnerContact_Id = B.LearnerContact_Id
WHERE (((A.LocType)=1 Or (A.LocType)=2) AND ((A.ContType)=2))
GROUP BY A.Learner_Id;
答案 0 :(得分:1)
Max可能适合:
SELECT t.ID2,
Max(t.Fld1) AS MaxOfFld1,
Max(t.Fld2) AS MaxOfFld2,
Max(x.Fld3) AS MaxOfFld3
FROM aTable t
INNER JOIN bTable x
ON t.ID1 = x.ID1
GROUP BY t.ID2;