Google Sheets全连接问题:求可包含两表所有行的连接公式
解决Google Sheets两表合并(全外连接+保留重复行)问题
你的问题出在原公式的两个核心局限上:
- 单向匹配导致表1独有的行丢失:你是从表2的ID范围出发去查询表1数据,所以表1中那些没出现在表2里的ID(比如20)自然不会被包含进结果。
- VLOOKUP的单匹配特性:虽然表2里有两行ID=4,但VLOOKUP本身只会返回第一个匹配结果——不过更关键的是,要同时保留两表的所有行(包括独有的行和重复ID行),单向匹配的思路就不适用。
下面给你两种可行的解决方案:
方案1:用QUERY实现全外连接(自动补全缺失列)
这个公式会把两个表的所有行都整合进来,对于只在一个表中存在的行,另一表的列会自动填充N/A,同时保留所有重复行:
=ARRAYFORMULA(QUERY( { --A3:A7, B3:C7, IFERROR(VLOOKUP(A3:A7, G3:H8, 2, FALSE), "N/A"); --G3:G8, IFERROR(VLOOKUP(G3:G8, A3:C7, {2,3}, FALSE), {"N/A", "N/A"}), H3:H8 }, "SELECT Col1, Col4, Col2, Col3 WHERE Col1 IS NOT NULL ORDER BY Col1", 0 ))
细节说明:
--A3:A7和--G3:G8是把ID转为数字类型,避免文本/数字ID的匹配误差- 第一部分是表1的所有行,补充匹配表2的
Car列(无匹配则显示N/A) - 第二部分是表2的所有行,补充匹配表1的
Name和City列(无匹配则显示N/A) - QUERY语句重新排列了列顺序为
Account id → Car → Name → City,并按ID排序(不需要排序可以去掉ORDER BY Col1)
方案2:用数组组合+可选去重(更灵活)
如果需要自由控制是否去重,或者更直观的数组拼接,可以用这个公式:
=ARRAYFORMULA({ // 表1行 + 匹配的表2Car列 A3:C7, IFERROR(VLOOKUP(A3:A7, G3:H8, 2, FALSE), "N/A"); // 表2行 + 匹配的表1Name/City列 G3:G8, IFERROR(VLOOKUP(G3:G8, A3:C7, {2,3}, FALSE), {"N/A", "N/A"}), H3:H8 })
可选调整:
- 如果需要去掉完全重复的行(比如两表中完全一致的行),可以在外层套上
UNIQUE函数:=ARRAYFORMULA(UNIQUE({ A3:C7, IFERROR(VLOOKUP(A3:A7, G3:H8, 2, FALSE), "N/A"); G3:G8, IFERROR(VLOOKUP(G3:G8, A3:C7, {2,3}, FALSE), {"N/A", "N/A"}), H3:H8 }))
这两个方案都会解决你遇到的问题:
- 表1独有的
20 N/A Klaus Berlin行会被包含进来 - 表2里的两行
4 BMW David London和4 VW David Paris都会完整显示
内容的提问来源于stack exchange,提问作者Ludvig Hansson
相关产品推荐
相关产品推荐

