2017-10-30 27 views
2

私は使用したいFULL OUTER JOIN VBA excel.Belowは、コードとテーブルです。どのように私は同じを使用することができますガイドしてください。VBA ExcelでSQLのFULL OUTER JOINクエリを使用する方法

第一卓上

enter image description here

第二卓上

enter image description here

VBAコード: -

Sub SQL() 

Dim cn As ADODB.Connection 
Dim rs As ADODB.Recordset 

strFile = ThisWorkbook.FullName 
strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile _ 
& ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";" 

Set cn = CreateObject("ADODB.Connection") 
Set rs = CreateObject("ADODB.Recordset") 

cn.Open strCon 

strSQL = "SELECT * FROM [Sheet3$] FULL OUTER JOIN [Sheet2$] ON [Sheet2$].[Sr]=[Sheet3$].[Sr]" 
rs.Open strSQL, cn 

Sheet5.Range("D1").CopyFromRecordset rs 

End Sub 

私の上記のコードでは、私は以下のエラーが発生しています。

enter image description here

答えて

1

私はあなたの現在のエラーは、実際にも、クエリによって引き起こされていることはよく分かりません。しかし、MS AccessはFULL OUTER JOINをサポートしていません。私は任意col1col2と呼ばSheet3$から2つの列を選択することを選んだ

SELECT s1.col1, s1.col2 
FROM [Sheet3$] s1 
LEFT JOIN [Sheet2$] s2 
    ON s1.[Sr] = s2.[Sr] 
UNION ALL 
SELECT s2.col1, s2.col2 
FROM [Sheet2$] s1 
LEFT JOIN [Sheet3$] s2 
    ON s1.[Sr] = s2.[Sr] 

:しかし、あなたは、2つのクエリのUNIONを使用して、それをシミュレートすることができます。 SELECT *を使用しないようにすることをお勧めしますが、一般的にコードが道路の途中で折れやすい傾向があるため、自由に任意の列を選択できます。代わりに、明示的に必要な列を選択するだけです。

0

Query1を

strSQL = "SELECT a.* ,b.* FROM [Sheet2$] as a LEFT JOIN [Sheet3$] as b ON a.[Sr]=b.[Sr]" 

enter image description here

Qeury2

strSQL = "SELECT a.* ,b.Family FROM [Sheet2$] as a LEFT JOIN [Sheet3$] as b ON a.[Sr]=b.[Sr]" 

enter image description here

+0

あなたのソリューションで提案されているように、OPは具体的には 'FULL OUTER JOIN'を要求し、' LEFT JOIN'は要求しません。だから、あなたがなぜこれを解決策として投稿したのか分かりません。あなたは詳細を教えていただけますか? – Ralph

+0

@Ralph、私はadodbでは、完全な外部結合はサポートされていないと思います。 sheet2 Srにはsheet3 Srフィールドのすべてのデータがあります。その結果は完全外部結合と同じように見えます。 –

0

ADODBがFULL OUTER JOINをサポートしていないが、表A OUTER表Bは、テーブルAに相当し、JOIN LEFT JOIN TableB UNION TableB左結合テーブルA if y重複を除去する。だから、

(TableB.sr = TableA.sr上の表Aに参加しTableBの左からTableBのON TableA.sr = TableB.sr連合選択col1の参加TableAの左からCOL1を選択)* FROM DISTINCT選択を模倣しますフルアウター

関連する問題