大家好,今日繼續講解VBA數據庫解決方案,今日的内容是第70講: 數據查詢中,三個工作表聯合查詢的方法。在各種查詢中,内連接,左外連接,右外連接等等,這些方法大家在工作中要多加利用,并且靈活利用,利用多了,知識就變成自己的了。今日我們講解的是三個工作表的聯合查詢,也就是說三個工作表的數據要一次查詢。我們還是看下面的實例講解。
實例,我們有三個工作表,工作表"數據3",工作表"數據7",工作表"數據8"數據如下:
我們在上面的三個工作表中以員工編号為線索,要返回三個表的聯合表格,同時字段要全字段,員工編号,姓名,年齡,民族,植樹數量,成活數量,這個代碼要如何寫呢?下面看我的代碼:
Sub mynzRecords_70() '第70講 三表查詢SQL
Dim cnADO, rsADO As Object
Dim strPath, strSQL As String
Worksheets("70").Select
Cells.ClearContents
Set cnADO = CreateObject("ADODB.Connection")
Set rsADO = CreateObject("ADODB.Recordset")
strPath = ThisWorkbook.FullName
cnADO.Open "provider=Microsoft.ACE.OLEDB.12.0;extended properties='excel 12.0;hdr=yes;imex=1';data source=" & strPath
strSQL = "select A.員工編号,B.姓名,B.年齡,C.民族,A.植樹數量,A.成活數量" _
& " from [數據3$] as A,[數據7$] as B,[數據8$]" _
& " as C where A.員工編号=B.員工編号 and B.員工編号=C.員工編号 group by " _
& "A.員工編号,B.姓名,B.年齡,C.民族,A.植樹數量,A.成活數量"
'打開記錄集
rsADO.Open strSQL, cnADO, 1, 3
For i = 1 To rsADO.Fields.Count
Cells(1, i) = rsADO.Fields(i - 1).Name
Next
'提出數據
Range("a2").CopyFromRecordset rsADO
'釋放内存
rsADO.Close
cnADO.Close
Set rsADO = Nothing
Set cnADO = Nothing
End Sub
代碼截圖:
代碼解讀:
1 上述代碼就是要聯合數據3工作表、數據7工作表、數據8工作表,通過A.員工編号=B.員工編号 and B.員工編号=C.員工編号量實現三表聯合查詢
2 strSQL = "select A.員工編号,B.姓名,B.年齡,C.民族,A.植樹數量,A.成活數量" _
& " from [數據3$] as A,[數據7$] as B,[數據8$]" _
& " as C where A.員工編号=B.員工編号 and B.員工編号=C.員工編号 group by " _
& "A.員工編号,B.姓名,B.年齡,C.民族,A.植樹數量,A.成活數量"
上述SQL 語句就是實現三表聯合查詢的代碼。
3 上述查詢中需要注意的是後面的group by 語句的寫法,大家在複制代碼的時候要注意格式,不可以寫錯。
下面看代碼的運行:
今日内容回向:
1 如何實現三表聯合查詢?
2 三表聯合查詢中是通過什麼來實現的?
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!