LEFT JOIN Excel VBA ADODB无法正常工作

时间:2018-03-14 07:40:42

标签: sql excel vba excel-vba join

我正在尝试将两个主页中的数据合并到一个工作簿中。 我已经成功地将数据查询到两个不同的记录集中,如下所示:

SELECT F1,F5,F12,F13,F37,F38 FROM [KAP$] WHERE F8 LIKE 'klima'

SELECT F1, F2, F3, F4, F5, F6, F7, F8 FROM [Klima$A3:H899] WHERE F1 IS NOT NULL

不幸的是,我还没有找到“合并”两个记录集的方法。 但是我注意到,更好的方法是使用左连接一次查询两张纸。但是我只是无法正确使用语法。我的最后一次尝试是这样的:

SELECT
[KAP$].F1,
[KAP$].F5,
[KAP$].F12,
[KAP$].F13,
[KAP$].F37, 
[KAP$].F38,
[Klima$].F1,
[Klima$].F2,
[Klima$].F3,
[Klima$].F4, 
[Klima$].F5,
[Klima$].F6,
[Klima$].F7,
[Klima$].F8
FROM [KAP$] WHERE [KAP$].F8 LIKE 'Klima' LEFT JOIN [Klima$A3:H899] ON [KAP$].F1=[Klima$].F1

但正如我已经注意到它有不止一个问题...任何帮助都是a,,我一直在寻找一个合适的excel vba adodb指南几个小时没有成功....

谢谢!

编辑:以下是一些示例数据:

KAP:

ID1  Info1  Info2  KAPinfo1  KAPinfo2  KAPinfo3
ID2  Info1  Info2  KAPinfo1  KAPinfo2  KAPinfo3
ID3  Info1  Info2  KAPinfo1  KAPinfo2  KAPinfo3
ID4  Info1  Info2  KAPinfo1  KAPinfo2  KAPinfo3
ID5  Info1  Info2  KAPinfo1  KAPinfo2  KAPinfo3
ID6  Info1  Info2  KAPinfo1  KAPinfo2  KAPinfo3

克利马:

ID1 Info1  Info2  Klima3  Klima4  Klima5  Klima6  Klima7  Klima8
ID2 Info1  Info2  Klima3  Klima4  Klima5  Klima6  Klima7  Klima8
ID3 Info1  Info2  Klima3  Klima4  Klima5  Klima6  Klima7  Klima8
ID6 Info1  -  -   Klima3  Klima4  Klima5  Klima6  Klima7  Klima8

合并的表应如下所示:

ID1 Info1  Info2  Klima3  Klima4  Klima5  Klima6  Klima7  Klima8  KAPinfo1  KAPinfo2  KAPinfo3
ID2 Info1  Info2  Klima3  Klima4  Klima5  Klima6  Klima7  Klima8  KAPinfo1  KAPinfo2  KAPinfo3
ID3 Info1  Info2  Klima3  Klima4  Klima5  Klima6  Klima7  Klima8  KAPinfo1  KAPinfo2  KAPinfo3
ID4 Info1  Info2  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  KAPinfo1  KAPinfo2  KAPinfo3
ID5 Info1  Info2  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  KAPinfo1  KAPinfo2  KAPinfo3
ID6 Info1  Info2  Klima3  Klima4  Klima5  Klima6  Klima7  Klima8  KAPinfo1  KAPinfo2  KAPinfo3

基本上我想用左表(KAP)中的信息覆盖右表(Klima)中的列Info1和Info2,同时在右表中保留额外的列(Klima)

2 个答案:

答案 0 :(得分:4)

如果您需要左连接,则sintax for join应为:

SELECT
[KAP$].F1,
[KAP$].F5,
[KAP$].F12,
[KAP$].F13,
[KAP$].F37, 
[KAP$].F38,
[Klima$A3:H899].F1,
[Klima$A3:H899].F2,
[Klima$A3:H899].F3,
[Klima$A3:H899].F4, 
[Klima$A3:H899].F5,
[Klima$A3:H899].F6,
[Klima$A3:H899].F7,
[Klima$A3:H899].F8
FROM [KAP$]
LEFT JOIN [Klima$A3:H899]   ON ([KAP$].F1=[Klima$A3:H899].F1)
WHERE   [KAP$].F8 LIKE 'Klima%' 

假设[Klima $ A3:H899]是有效的表或同等的

答案 1 :(得分:1)

尝试此查询:

SELECT [KAP$].F1,
       [KAP$].F5,
       [KAP$].F12,
       [KAP$].F13,
       [KAP$].F37, 
       [KAP$].F38,
       [Klima$].F1,
       [Klima$].F2,
       [Klima$].F3,
       [Klima$].F4, 
       [Klima$].F5,
       [Klima$].F6,
       [Klima$].F7,
       [Klima$].F8
FROM
    (SELECT F1,F5,F12,F13,F37,F38 FROM [KAP$] WHERE F8 LIKE 'klima') AS [KAP$]
LEFT JOIN
    (SELECT F1, F2, F3, F4, F5, F6, F7, F8 FROM [Klima$A3:H899] WHERE F1 IS NOT NULL) AS [Klima$]
ON [KAP$].F1 = [Klima$].F1