[英]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.