简体   繁体   English

SQL一对多联接问题

[英]SQL One-To-Many join issue

Let's say I have two tables in Access. 假设我在Access中有两个表。 TableLetters and TableNumbers. 表格字母和表格编号。 TableLetters has one column TheLetter and 4 records, A, B, C, & D. TheNumbers is many for one TableLetters record. TableLetters具有一列TheLetter和4个记录,A,B,C和D。对于一个TableLetters记录,TheNumbers很多。 Say we have two columns in TheNumbersTable [TheLetter][TheNumber]. 假设我们在TheNumbersTable [TheLetter] [TheNumber]中有两列。 See below: 见下文:

TheLetters
[TheLetter]
A
B
C
D

TheNumbers
[TheLetter][TheNumber]
A          1
A          2
A          3
B          1
B          2

How do I write a query that returns one record for each "TheLetters" record and the MAX "TheNumber" from TheNumbers table or blank if there's no match for TheLetter in TheNumbers table? 如何编写查询,为每个“ TheLetters”记录返回一个记录以及TheNumbers表中的MAX“ TheNumber”返回一个查询,如果TheNumbers表中的TheLetter不匹配,则返回空白? So I want my result set to be: 所以我希望我的结果是:

[TheLetters.TheLetter][TheNumbers.TheNumber]
A                     3  
B                     2  
C                     <NULL>
D                     <NULL>

I can get A,3 - B,2 but it cuts out C & D because there's not a match in TheNumbers. 我可以得到A,3-B,2,但由于TheNumbers中没有匹配项,因此它削减了C&D。 I've tried switching my joins all around. 我试过各地切换我的联接。 I've tried putting an IF in the WHERE clause that says if we have a match return the record from TheNumbers or else give me blank. 我尝试将IF放在WHERE子句中,该子句说如果我们有匹配项,则从TheNumbers返回记录,否则给我空白。 I can't seem to get the syntax right. 我似乎无法正确理解语法。 Thanks for any help! 谢谢你的帮助!

The key is to use a LEFT JOIN : 关键是使用LEFT JOIN

SELECT l.TheLetter, MAX(n.TheNumber)
FROM TheLetters l
LEFT JOIN TheNumbers n ON l.TheLetter = n.TheLetter
GROUP BY l.TheLetter

A left outer join returns all rows in the left table, returning data for any correlated rows in the right table, or a single row with the right table's columns set to NULL if there are no correlated rows. 左外部联接返回左表中的所有行,返回右表中任何相关行的数据,或者如果没有相关行,则将右表的列设置为NULL的单个行返回。

Left Join should correct as below 左联接应如下所示更正

SELECT l.TheLetter, MAX(n.TheNumber) FROM TheLetters l LEFT JOIN TheNumbers n ON l.TheLetter = n.TheLetter GROUP BY l.TheLetter 从字母中选择l.TheLetter,MAX(n.TheNumber)l左联接l.TheLetter = n.TheLetter GROUP BY n.TheLetter

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM