Đôi khi, bạn có thể muốn liệt kê các bản ghi trong một bảng hoặc truy vấn các bản ghi trong một hoặc nhiều bảng khác để cấu hình thành một bộ nhiều bản ghi - list bao gồm tất cả các bản ghi từ hai hoặc nhiều bảng. Đây là mục đích của một truy vấn hợp tác trong Access
Để hiểu được truy vấn hợp tác một cách hiệu quả, trước hết bạn sẽ làm quen với việc thiết kế truy vấn lựa chọn cơ bản trong Access. Để tìm hiểu thêm thông tin về thiết kế truy vấn lựa chọn, hãy xem mục Tạo truy vấn lựa chọn đơn giản
Lưu ý. Nội dung trong bài viết này được sử dụng với cơ sở dữ liệu máy tính Access. Bạn không thể tạo hoặc sử dụng truy vấn hợp tác trong cơ sở dữ liệu web Access hoặc ứng dụng web Access
Nghiên cứu ví dụ truy vấn hoạt động
Nếu bạn chưa bao giờ tạo một truy vấn hợp tác trước đó, bạn có thể thấy hữu ích khi nghiên cứu một ví dụ hoạt động trong mẫu Northwind Access trước tiên. Bạn có thể tìm kiếm mẫu Northwind mẫu trên trang bắt đầu của Access bằng cách nhấn vào Tệp > Mới hoặc có thể trực tiếp tải xuống bản sao từ vị trí này. Mẫu Northwind
Sau khi Truy cập mở cơ sở dữ liệu Northwind, hãy bỏ qua biểu mẫu hộp thoại đăng nhập xuất hiện tiêu đề, sau đó bung rộng Ngăn dẫn hướng. Bấm vào phần trên cùng của Chặn dẫn hướng, sau đó chọn Loại đối tượng để sắp xếp tất cả các đối tượng cơ sở dữ liệu theo loại. Tiếp theo, mở rộng nhóm Truy vấn và bạn sẽ thấy một truy vấn có tên là Giao dịch sản phẩm
Truy vấn hợp rất dễ phân biệt với các đối tượng truy vấn khác vì có biểu tượng đặc biệt giống như hai vòng tròn cuộn vào nhau đại diện cho một bộ liên kết từ hai bộ
Không giống như truy vấn lựa chọn và hành động thông thường, các bảng không liên quan nhau trong truy vấn hợp hợp, có nghĩa là không thể sử dụng trình thiết kế truy vấn đồ họa Truy cập để xây dựng hoặc chỉnh sửa truy vấn hợp hợp. Bạn sẽ gặp vấn đề này nếu mở một truy vấn hợp tác từ Chặn dẫn hướng; . Bên dưới lệnh Xuyến xem trên tab Trang đầu, bạn sẽ nhận thấy rằng Xuyến xem thiết kế sẽ không sẵn dùng khi làm việc với truy vấn hợp tác. Bạn chỉ có thể chuyển đổi giữa Mở rộng xem biểu dữ liệu và Mở rộng xem SQL khi làm việc với truy vấn hợp nhất
Để tiếp tục nghiên cứu về ví dụ truy vấn hợp tác này, hãy nhấn vào Trang đầu > Khám phá > Khám phá SQL để xem cú pháp SQL xác thực truy vấn. Trong hình minh họa này, chúng tôi đã thêm một số giãn cách thừa trong SQL để bạn có thể dễ dàng thấy nhiều phần khác nhau tạo nên một truy vấn hợp nhất
Hãy cùng nghiên cứu chi tiết cú pháp SQL của truy vấn hợp tác này từ cơ sở dữ liệu Northwind
SELECT Customers.Company, Customers.[Last Name], Customers.[First Name] FROM Customers UNION SELECT Suppliers.Company, Suppliers.[Last Name], Suppliers.[First Name] FROM Suppliers UNION SELECT Employees.Company, Employees.[Last Name], Employees.[First Name] FROM Employees ORDER BY [Last Name], [First Name];2
Phần đầu tiên và phần thứ ba của câu lệnh SQL này cơ bản là hai truy vấn lựa chọn. Các truy vấn này truy xuất hai bộ ghi khác nhau;
Phần thứ hai trong câu lệnh SQL này là từ khóa UNION báo cho Access rằng truy vấn này sẽ kết hợp hai bộ bản ghi
Phần cuối của câu lệnh SQL này xác nhận thứ tự của các bản ghi được kết hợp bằng cách sử dụng câu lệnh ORDER BY. Trong ví dụ này, Access sẽ xếp thứ tự tất cả các bản ghi theo trường Ngày đặt hàng theo thứ tự giảm dần
Lưu ý. Truy vấn hợp lệ luôn ở trạng thái chỉ đọc trong Access;
Tạo một truy vấn hợp nhất bằng cách tạo và kết hợp các truy vấn được chọn
Ngay cả khi có thể tạo truy vấn hợp nhất bằng cách viết trực tiếp cú pháp SQL ở dạng xem SQL, bạn cũng có thể thấy dễ dàng hơn khi xây dựng truy vấn một số phần với truy vấn chọn. Sau đó, bạn có thể sao chép và dán các phần SQL vào một truy vấn đã được kết hợp
Nếu bạn muốn bỏ qua việc đọc các bước và thay vào đó là xem ví dụ, hãy xem mục tiếp theo,
Trên tab Tạo, trong nhóm Truy vấn, nhấn Thiết kế Truy vấn
Nhấp đúp vào bảng có các trường mà bạn muốn nhập. Thêm bảng vào cửa sổ thiết kế truy vấn
Trong cửa sổ thiết kế truy vấn, hãy nhấp đúp vào từng trường mà bạn muốn bao gồm. Khi bạn chọn trường, hãy đảm bảo rằng bạn thêm cùng một số trường, trong cùng một thứ tự mà bạn thêm vào truy vấn lựa chọn khác. Hết sức chú ý đến kiểu dữ liệu của trường và chắc chắn rằng chúng có kiểu dữ liệu tương thích với trường trong cùng một vị trí, trong truy vấn khác mà bạn đang kết hợp. Ví dụ. Nếu truy vấn lựa chọn đầu tiên của bạn có năm trường, trường đầu tiên chứa dữ liệu ngày/thời gian, hãy đảm bảo rằng mỗi truy vấn lựa chọn khác mà bạn đang kết hợp cũng có năm trường, trường đầu tiên chứa dữ liệu ngày/ . v
Bạn có thể tùy chọn thêm tiêu chí vào các trường của mình bằng cách nhập biểu thức phù hợp vào hàng tiêu chí của lưới trường
Sau khi đã hoàn tất việc thêm trường và tiêu chí trường, bạn nên chạy truy vấn đã chọn và xem lại đầu ra của truy vấn đó. Trên tab Thiết kế, trong nhóm Kết quả, nhấn vào Chạy
Chuyển truy vấn sang định dạng xem Thiết kế
Lưu lựa chọn truy vấn và để truy vấn mở
lặp lại thủ tục này cho mỗi truy vấn lựa chọn mà bạn muốn kết hợp
Giờ đây, bạn đã tạo các truy vấn lựa chọn của mình, đã đến lúc kết hợp các truy vấn đó. Trong bước này, bạn tạo truy vấn hợp nhất bằng cách sao chép và dán các câu lệnh SQL
Trên tab Tạo, trong nhóm Truy vấn, nhấn Thiết kế Truy vấn
Trên tab Thiết kế, trong nhóm Truy vấn, nhấn vào Kết hợp. Truy cập ẩn cửa sổ thiết kế truy vấn và hiển thị tab đối tượng dạng xem SQL. Lúc này, dạng tab đối tượng xem SQL trống
Vui lòng nhấn vào tab để truy vấn lựa chọn đầu tiên mà bạn muốn kết hợp trong truy vấn hợp tác
Trên tab Trang đầu, nhấp vào Xem dưới dạng > Xem dưới dạng SQL
Sao chép câu lệnh SQL để truy vấn lựa chọn. Bấm vào tab dành để truy vấn tổng hợp bạn đã bắt đầu tạo trước đó
Dán câu lệnh SQL cho truy vấn chọn vào tab đối tượng dạng xem SQL của truy vấn hợp lệ
Xóa bỏ dấu chấm phẩy [;] ở cuối câu lệnh SQL của truy vấn lựa chọn
Nhấn phím Enter để di chuyển con trỏ xuống một dòng, sau đó nhập UNION vào dòng mới
Vui lòng nhấn vào tab để truy vấn lựa chọn tiếp theo mà bạn muốn kết hợp trong truy vấn hợp tác
lặp lại từ bước 5 đến bước 10 cho đến khi bạn đã sao chép và dán tất cả câu lệnh SQL để truy vấn chọn trong cửa sổ dạng xem SQL của truy vấn hợp nhất. Không xóa dấu chấm than hoặc nhập bất kỳ ký tự nào sau câu lệnh SQL để truy vấn cuối cùng được chọn
Trên tab Thiết kế, trong nhóm Kết quả, nhấn Chạy
Kết quả của cuộc truy vấn hợp nhất sẽ xuất hiện trong màn hình xem biểu dữ liệu
Xem ví dụ về cách xây dựng truy vấn hợp tác
Đây là ví dụ bạn có thể tạo lại trong cơ sở dữ liệu mẫu Northwind. Truy vấn này thu thập tên người từ bảng Khách hàng và kết hợp với tên người từ bảng Nhà cung cấp. Nếu bạn muốn làm theo, hãy thực hiện các bước này trong bản sao cơ sở dữ liệu mẫu Northwind của mình
Đây là những bước cần thiết để xây dựng ví dụ này
Tạo hai truy vấn được chọn có tên là Truy vấn_1 và Truy vấn_2 với các bảng Khách hàng và Nhà cung cấp tương ứng theo thứ tự làm nguồn dữ liệu. Tên trường sử dụng và họ làm giá trị hiển thị
Tạo một truy vấn mới có tên là Truy vấn_3 không có nguồn dữ liệu ban đầu, sau đó nhấn vào lệnh Kết hợp trên tab Thiết kế để đưa truy vấn này vào Truy vấn hợp hợp
Sao chép và dán các câu lệnh SQL từ Truy vấn_1 và Truy vấn_2 vào Truy vấn_3. Bảo đảm loại bỏ dấu chấm thừa và thêm vào từ khóa UNION. Sau đó, bạn có thể kiểm tra kết quả của mình ở dạng xem biểu dữ liệu
Thêm mệnh đề xếp thứ tự vào một trong các truy vấn, sau đó dán câu lệnh ORDER BY vào dạng xem truy vấn hợp hợp SQL. Lưu ý rằng trong Truy vấn_3, truy vấn hợp hợp, khi thứ tự xếp hạng được gắn thêm, trước tiên, các dấu chấm phẩy, sau đó là bảng tên sẽ bị loại khỏi tên trường
SQL cuối cùng sẽ kết hợp và sắp xếp các tên được sử dụng cho ví dụ truy vấn này là như sau
SELECT Customers.Company, Customers.[Last Name], Customers.[First Name] FROM Customers UNION SELECT Suppliers.Company, Suppliers.[Last Name], Suppliers.[First Name] FROM Suppliers UNION SELECT Employees.Company, Employees.[Last Name], Employees.[First Name] FROM Employees ORDER BY [Last Name], [First Name];
3
Nếu bạn viết cú pháp SQL một cách rất dễ dàng, bạn có thể chắc chắn viết trực tiếp câu lệnh SQL của riêng mình để truy vấn hợp vào dạng xem SQL. Tuy nhiên, bạn có thể thấy hữu ích khi thực hiện theo phương pháp tiếp cận sao chép và dán SQL từ các đối tượng truy vấn khác. Từng truy vấn có thể phức tạp hơn nhiều so với các ví dụ truy vấn chọn đơn giản được sử dụng tại đây. Đây có thể là lợi thế của bạn khi tạo và kiểm tra từng truy vấn một cách cẩn thận trước khi kết hợp các truy vấn trong truy vấn hợp tác. Nếu truy vấn hợp không chạy, bạn có thể điều chỉnh từng truy vấn riêng lẻ cho đến khi thành công, sau đó xây dựng lại truy vấn hợp của mình bằng cú pháp đúng
Xem lại các mục còn lại của bài viết này để tìm hiểu thêm các mẹo và thủ thuật về cách sử dụng truy vấn hợp tác
Kết hợp ba hoặc nhiều bảng hoặc truy vấn trong một truy vấn hợp nhất
Trong ví dụ ở mục trước đó sử dụng cơ sở dữ liệu Northwind, chỉ kết hợp dữ liệu được lấy từ hai bảng. Tuy nhiên, bạn có thể kết hợp ba hoặc nhiều bảng rất dễ dàng trong một truy vấn hợp hợp. Ví dụ. build on ví dụ trước, bạn có thể cũng muốn đính kèm theo tên của nhân viên khi bắt đầu truy vấn. Bạn có thể thực hiện nhiệm vụ đó bằng cách thêm một truy vấn thứ ba và kết hợp với câu lệnh SQL trước đó với từ khóa UNION bổ sung như thế này
SELECT Customers.Company, Customers.[Last Name], Customers.[First Name] FROM Customers UNION SELECT Suppliers.Company, Suppliers.[Last Name], Suppliers.[First Name] FROM Suppliers UNION SELECT Employees.Company, Employees.[Last Name], Employees.[First Name] FROM Employees ORDER BY [Last Name], [First Name];4
Khi bạn xem kết quả ở dạng xem biểu dữ liệu, tất cả nhân viên sẽ được liệt kê cùng tên công ty mẫu, vốn không thể rất hữu ích. Nếu bạn muốn trường đó biết một người là nhân viên nội bộ, từ nhà cung cấp hoặc từ khách hàng, bạn có thể đưa vào giá trị cố định thay cho tên công ty. This is the SQL interface
SELECT Customers.Company, Customers.[Last Name], Customers.[First Name] FROM Customers UNION SELECT Suppliers.Company, Suppliers.[Last Name], Suppliers.[First Name] FROM Suppliers UNION SELECT Employees.Company, Employees.[Last Name], Employees.[First Name] FROM Employees ORDER BY [Last Name], [First Name];5
Đây là kết quả giao diện sẽ xuất hiện ở dạng xem biểu dữ liệu. Access will show the year of the write ví dụ này
Công việc
Họ
Mười
Nội bộ
Freehafer
Nancy
Nội bộ
Giussani
Laura
Nhà cung cấp
thủy tinh
Stuart
khách hàng
Goldschmidt
Đa-ni-ên
khách hàng
Gratacos Solsona
antonio
Truy vấn bên trên có thể giảm thậm chí nhiều hơn vì Access chỉ đọc tên của trường bắt đầu từ truy vấn đầu tiên trong truy vấn hợp tác. Tại đây, bạn thấy chúng ta đã loại bỏ đầu ra khỏi truy vấn thứ hai và thứ ba
SELECT Customers.Company, Customers.[Last Name], Customers.[First Name] FROM Customers UNION SELECT Suppliers.Company, Suppliers.[Last Name], Suppliers.[First Name] FROM Suppliers UNION SELECT Employees.Company, Employees.[Last Name], Employees.[First Name] FROM Employees ORDER BY [Last Name], [First Name];6
Lọc trong truy vấn hợp tác
Trong truy vấn hợp tác, chỉ cho phép xếp thứ tự một lần nhưng mỗi truy vấn có thể được lọc riêng biệt. Việc xây dựng trên truy vấn hợp nhất của mục trước, dưới đây là ví dụ về vị trí chúng ta đã lọc từng truy vấn bằng cách bổ sung mệnh đề WHERE
SELECT Customers.Company, Customers.[Last Name], Customers.[First Name] FROM Customers UNION SELECT Suppliers.Company, Suppliers.[Last Name], Suppliers.[First Name] FROM Suppliers UNION SELECT Employees.Company, Employees.[Last Name], Employees.[First Name] FROM Employees ORDER BY [Last Name], [First Name];7
Chuyển đổi sang định dạng xem biểu dữ liệu và bạn sẽ thấy kết quả có định dạng như sau
Công việc
Họ
Mười
Nhà cung cấp
Andersen
Elizabeth A
Nội bộ
Freehafer
Nancy
khách hàng
Hasselberg
Jonas
Nội bộ
Hellung-Larsen
Anne
Nhà cung cấp
Hernandez-Echevarria
Amaya
khách hàng
chùm ngây
Sven
Nhà cung cấp
Sandberg
Mikael
Nhà cung cấp
Sousa
Luis
Nội bộ
Thorpe
steven
Nhà cung cấp
người đánh cá
ngô đồng
Nội bộ
Zare
Robert
Mixed data type
Nếu các truy vấn cần kết hợp tất cả các loại dữ liệu rất khác nhau, bạn có thể gặp phải một vấn đề là trường đầu ra phải kết hợp dữ liệu của các loại dữ liệu khác nhau. Nếu vậy, truy vấn hầu hết như thường lệ sẽ trả về kết quả dưới dạng loại dữ liệu văn bản do loại dữ liệu có thể lưu giữ cả văn bản và số
Để tìm hiểu cách truy vấn hoạt động này, chúng ta sẽ sử dụng truy vấn hợp tác Giao dịch sản phẩm trong cơ sở dữ liệu mẫu Northwind. Mở cơ sở dữ liệu mẫu đó, sau đó mở truy vấn Giao dịch sản phẩm ở dạng xem biểu dữ liệu. Cuối cùng của bản ghi phải tương tự như đầu ra này
ID Sản phẩm
Ngày đặt hàng
ty name
giao dịch
Number
77
22/01/2006
Nhà cung cấp B
Mua
60
80
22/01/2006
Nhà cung cấp D
Mua
75
81
22/01/2006
Nhà cung cấp A
Mua
125
81
22/01/2006
Nhà cung cấp A
Mua
200
7
20/01/2006
Công ty D
Lệnh cấm
10
51
20/01/2006
Công ty D
Lệnh cấm
10
80
20/01/2006
Công ty D
Lệnh cấm
10
34
15/01/2006
AA Company
Lệnh cấm
100
80
15/01/2006
AA Company
Lệnh cấm
25
Hãy giả định rằng bạn muốn trường Số lượng chia tách hai - Mua và Bán. Cũng hãy giả định rằng bạn muốn có giá trị không cố định vì trường không có giá trị. Đây là giao diện của SQL đối với truy vấn này
SELECT Customers.Company, Customers.[Last Name], Customers.[First Name] FROM Customers UNION SELECT Suppliers.Company, Suppliers.[Last Name], Suppliers.[First Name] FROM Suppliers UNION SELECT Employees.Company, Employees.[Last Name], Employees.[First Name] FROM Employees ORDER BY [Last Name], [First Name];8
Nếu bạn chuyển đổi sang dạng xem biểu dữ liệu, bạn sẽ thấy mười bản ghi cuối cùng giờ đây được hiển thị giống như sau
ID Sản phẩm
Ngày đặt hàng
ty name
giao dịch
Mua
Lệnh cấm
74
22/01/2006
Nhà cung cấp B
Mua
31
0
77
22/01/2006
Nhà cung cấp B
Mua
60
0
80
22/01/2006
Nhà cung cấp D
Mua
75
0
81
22/01/2006
Nhà cung cấp A
Mua
125
0
81
22/01/2006
Nhà cung cấp A
Mua
200
0
7
20/01/2006
Công ty D
Lệnh cấm
0
10
51
20/01/2006
Công ty D
Lệnh cấm
0
10
80
20/01/2006
Công ty D
Lệnh cấm
0
10
34
15/01/2006
AA Company
Lệnh cấm
0
100
80
15/01/2006
AA Company
Lệnh cấm
0
25
Tiếp tục ví dụ này, điều gì sẽ xảy ra nếu bạn muốn các trường có số không trống?
SELECT Customers.Company, Customers.[Last Name], Customers.[First Name] FROM Customers UNION SELECT Suppliers.Company, Suppliers.[Last Name], Suppliers.[First Name] FROM Suppliers UNION SELECT Employees.Company, Employees.[Last Name], Employees.[First Name] FROM Employees ORDER BY [Last Name], [First Name];9
Tuy nhiên, khi bạn có thể quan sát việc chuyển đổi sang dạng xem biểu dữ liệu, lúc này bạn đã có một kết quả không mong muốn. Trong cột Mua, mỗi trường đều bị xóa
ID Sản phẩm
Ngày đặt hàng
ty name
giao dịch
Mua
Lệnh cấm
74
22/01/2006
Nhà cung cấp B
Mua
77
22/01/2006
Nhà cung cấp B
Mua
80
22/01/2006
Nhà cung cấp D
Mua
81
22/01/2006
Nhà cung cấp A
Mua
81
22/01/2006
Nhà cung cấp A
Mua
7
20/01/2006
Công ty D
Lệnh cấm
10
51
20/01/2006
Công ty D
Lệnh cấm
10
80
20/01/2006
Công ty D
Lệnh cấm
10
34
15/01/2006
AA Company
Lệnh cấm
100
80
15/01/2006
AA Company
Lệnh cấm
25
Lý do mà điều này xảy ra là do Truy cập xác định loại dữ liệu của các trường từ truy vấn đầu tiên. Trong ví dụ này, Null không phải là một số
Vì vậy, điều gì sẽ xảy ra nếu bạn tìm cách và chèn một chuỗi trống cho giá trị của các trường trống?
SELECT "Customer" As Employment, Customers.[Last Name], Customers.[First Name] FROM Customers UNION SELECT "Supplier" As Employment, Suppliers.[Last Name], Suppliers.[First Name] FROM Suppliers UNION SELECT "In-house" As Employment, Employees.[Last Name], Employees.[First Name] FROM Employees ORDER BY [Last Name], [First Name];0
Khi bạn chuyển đổi sang dạng xem biểu dữ liệu, bạn sẽ thấy rằng Access truy xuất các giá trị Mua nhưng đã chuyển các giá trị này thành văn bản. Bạn có thể biết đây là giá trị của văn bản vì được căn cứ ở dạng xem biểu dữ liệu. Chuỗi trống trong truy vấn đầu tiên không phải là số vì bạn đã thấy kết quả này. Bạn cũng sẽ thấy rằng các giá trị Bán cũng được chuyển đổi thành văn bản vì các bản ghi mua có chứa chuỗi trống
ID Sản phẩm
Ngày đặt hàng
ty name
giao dịch
Mua
Lệnh cấm
74
22/01/2006
Nhà cung cấp B
Mua
31
77
22/01/2006
Nhà cung cấp B
Mua
60
80
22/01/2006
Nhà cung cấp D
Mua
75
81
22/01/2006
Nhà cung cấp A
Mua
125
81
22/01/2006
Nhà cung cấp A
Mua
200
7
20/01/2006
Công ty D
Lệnh cấm
10
51
20/01/2006
Công ty D
Lệnh cấm
10
80
20/01/2006
Công ty D
Lệnh cấm
10
34
15/01/2006
AA Company
Lệnh cấm
100
80
15/01/2006
AA Company
Lệnh cấm
25
Vật thì bạn giải quyết vấn đề này như thế nào?
Giải pháp là buộc truy vấn có giá trị trường là một số. Điều đó có thể được thực hiện bằng biểu thức
SELECT "Customer" As Employment, Customers.[Last Name], Customers.[First Name] FROM Customers UNION SELECT "Supplier" As Employment, Suppliers.[Last Name], Suppliers.[First Name] FROM Suppliers UNION SELECT "In-house" As Employment, Employees.[Last Name], Employees.[First Name] FROM Employees ORDER BY [Last Name], [First Name];1
Điều kiện để kiểm tra, Sai, sẽ không bao giờ là Đúng, làm như vậy biểu thức sẽ luôn trả về Null nhưng Access vẫn đánh giá cả hai tùy chọn đầu ra và quyết định đầu ra là số hoặc Null
Đây là cách chúng ta có thể sử dụng biểu thức này trong ví dụ hoạt động của mình
SELECT "Customer" As Employment, Customers.[Last Name], Customers.[First Name] FROM Customers UNION SELECT "Supplier" As Employment, Suppliers.[Last Name], Suppliers.[First Name] FROM Suppliers UNION SELECT "In-house" As Employment, Employees.[Last Name], Employees.[First Name] FROM Employees ORDER BY [Last Name], [First Name];2
Lưu ý rằng không cần thiết phải chỉnh sửa truy vấn thứ hai
Nếu bạn chuyển đổi sang dạng xem biểu dữ liệu, lúc này bạn sẽ thấy kết quả mà chúng ta mong muốn
ID Sản phẩm
Ngày đặt hàng
ty name
giao dịch
Mua
Lệnh cấm
74
22/01/2006
Nhà cung cấp B
Mua
31
77
22/01/2006
Nhà cung cấp B
Mua
60
80
22/01/2006
Nhà cung cấp D
Mua
75
81
22/01/2006
Nhà cung cấp A
Mua
125
81
22/01/2006
Nhà cung cấp A
Mua
200
7
20/01/2006
Công ty D
Lệnh cấm
10
51
20/01/2006
Công ty D
Lệnh cấm
10
80
20/01/2006
Công ty D
Lệnh cấm
10
34
15/01/2006
AA Company
Lệnh cấm
100
80
15/01/2006
AA Company
Lệnh cấm
25
Phương pháp thay thế để đạt được cùng một kết quả là thêm các truy vấn trong truy vấn hợp tác với một truy vấn khác
SELECT "Customer" As Employment, Customers.[Last Name], Customers.[First Name] FROM Customers UNION SELECT "Supplier" As Employment, Suppliers.[Last Name], Suppliers.[First Name] FROM Suppliers UNION SELECT "In-house" As Employment, Employees.[Last Name], Employees.[First Name] FROM Employees ORDER BY [Last Name], [First Name];3
Đối với từng trường, Access trả về các giá trị cố định của loại dữ liệu bạn xác định. Tất nhiên, bạn không muốn bắt đầu truy vấn vấn đề này gây trở ngại cho kết quả, do đó bí quyết để tránh điều này được thêm vào định mệnh WHERE to False
SELECT "Customer" As Employment, Customers.[Last Name], Customers.[First Name] FROM Customers UNION SELECT "Supplier" As Employment, Suppliers.[Last Name], Suppliers.[First Name] FROM Suppliers UNION SELECT "In-house" As Employment, Employees.[Last Name], Employees.[First Name] FROM Employees ORDER BY [Last Name], [First Name];4
Đây là một mẹo nhỏ vì kết quả luôn sai và sau đó truy vấn không trả về bất kỳ giá trị nào. Kết hợp câu lệnh này với SQL hiện có và chúng ta có câu lệnh được hoàn thành như sau
SELECT "Customer" As Employment, Customers.[Last Name], Customers.[First Name] FROM Customers UNION SELECT "Supplier" As Employment, Suppliers.[Last Name], Suppliers.[First Name] FROM Suppliers UNION SELECT "In-house" As Employment, Employees.[Last Name], Employees.[First Name] FROM Employees ORDER BY [Last Name], [First Name];5
Lưu ý. Truy vấn đã được kết hợp ở đây trong ví dụ này, sử dụng cơ sở dữ liệu Northwind trả về 100 bản ghi, trong khi hai truy vấn riêng lẻ trả về 58 và 43 bản ghi có tổng cộng là 101 bản ghi. Nguyên nhân về sự không thống nhất này là do hai bản ghi không phải là duy nhất. Vui lòng xem mục, để tìm hiểu cách giải quyết vấn đề này bằng cách sử dụng UNION ALL
Add tổng hợp vào truy vấn
Một trường hợp đặc biệt về truy vấn hợp nhất là kết hợp một bộ các bản ghi có một bản ghi chứa tổng của một hoặc nhiều trường
Đây là một ví dụ khác mà bạn có thể tạo ra trong cơ sở dữ liệu mẫu Northwind để minh họa cách nhận tổng trong truy vấn hợp tác
Tạo một truy vấn đơn giản mới để xem phần mua bia [ID Sản phẩm=34 trong cơ sở dữ liệu Northwind] bằng cú pháp SQL sau đây
SELECT "Customer" As Employment, Customers.[Last Name], Customers.[First Name] FROM Customers UNION SELECT "Supplier" As Employment, Suppliers.[Last Name], Suppliers.[First Name] FROM Suppliers UNION SELECT "In-house" As Employment, Employees.[Last Name], Employees.[First Name] FROM Employees ORDER BY [Last Name], [First Name];
6Chuyển đổi sang dạng xem biểu dữ liệu và bạn sẽ thấy bốn sản phẩm mua
Ngày nhận
Number
22/01/2006
100
22/01/2006
60
04/04/2006
50
05/04/2006
300
Để có được tổng hợp, hãy tạo một truy vấn tổng hợp đơn giản bằng SQL sau đây
SELECT "Customer" As Employment, Customers.[Last Name], Customers.[First Name] FROM Customers UNION SELECT "Supplier" As Employment, Suppliers.[Last Name], Suppliers.[First Name] FROM Suppliers UNION SELECT "In-house" As Employment, Employees.[Last Name], Employees.[First Name] FROM Employees ORDER BY [Last Name], [First Name];
7Chuyển đổi sang định dạng xem biểu dữ liệu và bạn sẽ chỉ thấy một bản ghi
Ngày nhận_tối_đa
Tổng_số_lượng
05/04/2006
510
Kết hợp hai truy vấn này vào một truy vấn hợp lệ để bổ sung bản ghi có tổng số lượng vào các bản ghi mua
SELECT "Customer" As Employment, Customers.[Last Name], Customers.[First Name] FROM Customers UNION SELECT "Supplier" As Employment, Suppliers.[Last Name], Suppliers.[First Name] FROM Suppliers UNION SELECT "In-house" As Employment, Employees.[Last Name], Employees.[First Name] FROM Employees ORDER BY [Last Name], [First Name];
8Chuyển đổi sang dạng xem biểu dữ liệu và bạn sẽ thấy bốn sản phẩm mua được tổng của từng sản phẩm kèm theo là một bản ghi tổng số lượng
Ngày nhận
Number
22/01/2006
60
22/01/2006
100
04/04/2006
50
05/04/2006
300
05/04/2006
510
Bài viết đó đề cập đến những thông tin cơ bản về cách tổng hợp thêm vào một truy vấn hợp tác. Bạn cũng có thể muốn đưa vào các giá trị cố định trong cả hai truy vấn có giới hạn như “Chi tiết” và “Tổng” để phân tách trực tiếp tổng số ghi từ các bản ghi khác nhau. Bạn có thể xem lại các giá trị cố định đang được sử dụng trong mục
Làm việc với các bản ghi riêng biệt trong truy vấn hợp tác bằng UNION ALL
Các truy vấn hợp tác trong Access theo mặc định chỉ bao gồm các bản ghi riêng biệt. Nhưng điều gì sẽ xảy ra nếu bạn muốn bao gồm tất cả các bản ghi?
Trong mục trước đó, chúng tôi chỉ cho bạn cách tạo tổng trong truy vấn hợp tác. Sửa đổi truy vấn SQL đó để có ID Sản phẩm= 48
SELECT "Customer" As Employment, Customers.[Last Name], Customers.[First Name] FROM Customers UNION SELECT "Supplier" As Employment, Suppliers.[Last Name], Suppliers.[First Name] FROM Suppliers UNION SELECT "In-house" As Employment, Employees.[Last Name], Employees.[First Name] FROM Employees ORDER BY [Last Name], [First Name];9
Chuyển đổi sang dạng xem biểu dữ liệu và bạn sẽ thấy kết quả hơi sai một chút
Ngày nhận
Number
22/01/2006
100
22/01/2006
200
Tất nhiên, một bản ghi sẽ không trả về hai lần tổng số
Lý do bạn thấy kết quả này là bởi vì trong một ngày cùng một lượng sôcôla đã được bán hai lần - như được ghi lại trong bảng Chi tiết đơn đặt hàng. Đây là kết quả của truy vấn chọn menu hiển thị cả hai bản ghi trong cơ sở dữ liệu mẫu Northwind
ID Đơn vị đặt hàng
Sản phẩm
Định lượng
100
Sô cô la Northwind Traders
100
92
Sô cô la Northwind Traders
100
Trong truy vấn hợp tác được ghi chú trước đó, bạn có thể thấy rằng ID trường Đơn hàng không được đưa vào và hai trường không tạo thành hai bản ghi riêng biệt
Nếu bạn muốn nhập tất cả các bản ghi vào, hãy sử dụng UNION ALL thay vì UNION trong SQL của mình. Điều này chủ yếu có thể sẽ gây ảnh hưởng đến việc sắp xếp kết quả, vì vậy bạn cũng có thể muốn đưa vào mệnh đề ORDER BY để xác định thứ tự sắp xếp. Đây là cách xây dựng SQL đã sửa đổi từ ví dụ trước đó
SELECT "Customer" As Employment, [Last Name], [First Name] FROM Customers UNION SELECT "Supplier", [Last Name], [First Name] FROM Suppliers UNION SELECT "In-house", [Last Name], [First Name] FROM Employees ORDER BY [Last Name], [First Name];0
Chuyển đổi sang định dạng xem biểu dữ liệu và bạn sẽ thấy tất cả các chi tiết bên ngoài dưới dạng cuối cùng của bản ghi
Ngày nhận
Total
Number
22/01/2006
100
22/01/2006
100
22/01/2006
Total cộng
200
Sử dụng truy vấn hợp tác để lọc các bản ghi trên biểu mẫu thông qua tổ hợp điều khiển hộp
Biến sử dụng phổ biến về truy vấn hợp đóng vai trò chơi là nguồn ghi cho hộp điều khiển tổ hợp trên biểu mẫu. Bạn có thể sử dụng tổ hợp hộp đó để chọn một giá trị cần lọc các bản ghi của biểu mẫu. Ví dụ. lọc bản ghi nhân viên theo thành phố
Để xem cách hoạt động, đây là một ví dụ khác mà bạn có thể tạo trong cơ sở dữ liệu mẫu Northwind để minh họa bản kịch bản này
Tạo truy vấn chọn đơn giản bằng cú pháp SQL này
SELECT "Customer" As Employment, [Last Name], [First Name] FROM Customers UNION SELECT "Supplier", [Last Name], [First Name] FROM Suppliers UNION SELECT "In-house", [Last Name], [First Name] FROM Employees ORDER BY [Last Name], [First Name];
1Chuyển đổi sang định dạng xem biểu dữ liệu và bạn sẽ thấy kết quả như sau
thành phố
filter
Seattle
Seattle
Bellevue
Bellevue
Redmond
Redmond
kirkland
kirkland
Seattle
Seattle
Redmond
Redmond
Seattle
Seattle
Redmond
Redmond
Seattle
Seattle
Đang xem kết quả mà bạn không thể thấy nhiều giá trị. Bung rộng truy vấn toàn bộ và biến đổi thành truy vấn hợp lý bằng cách sử dụng SQL sau đây
SELECT "Customer" As Employment, [Last Name], [First Name] FROM Customers UNION SELECT "Supplier", [Last Name], [First Name] FROM Suppliers UNION SELECT "In-house", [Last Name], [First Name] FROM Employees ORDER BY [Last Name], [First Name];
2Chuyển đổi sang định dạng xem biểu dữ liệu và bạn sẽ thấy kết quả như sau
thành phố
filter
*
Bellevue
Bellevue
kirkland
kirkland
Redmond
Redmond
Seattle
Seattle
Access sẽ thực hiện kết hợp chín bản ghi, được hiển thị trước đó, có các giá trị cố định là và "*".
Vì mệnh đề kết hợp này không bao gồm UNION ALL, nên Access sẽ chỉ trả về các bản ghi riêng biệt có nghĩa là từng thành phố chỉ được trả về một lần với các giá trị cố định giống nhau
Lúc này, bạn có một truy vấn hợp nhất đã hoàn thành hiển thị mỗi tên thành phố chỉ một lần, cùng với một tùy chọn sẽ chọn tất cả các thành phố theo một cách hiệu quả, bạn có thể sử dụng truy vấn này làm nguồn gốc . Sử dụng ví dụ về công cụ này để làm mô hình, bạn có thể tạo tổ hợp hộp điều khiển trên biểu mẫu, đặt truy vấn này làm nguồn ghi, đặt thuộc tính Chiều rộng cột của Bộ lọc thành 0 [số không] để ẩn . Trong thuộc tính Bộ lọc của bản thân biểu mẫu, bạn có thể thêm vào mã giả hạn như mã sau đây để kích hoạt bộ lọc biểu mẫu bằng giá trị của những gì đã được chọn trong tổ hợp hộp điều khiển
SELECT "Customer" As Employment, [Last Name], [First Name] FROM Customers UNION SELECT "Supplier", [Last Name], [First Name] FROM Suppliers UNION SELECT "In-house", [Last Name], [First Name] FROM Employees ORDER BY [Last Name], [First Name];
3Sau đó, người dùng của biểu mẫu có thể lọc các bản ghi biểu mẫu thành tên thành phố cụ thể hoặc chọn để liệt kê tất cả các bản ghi cho tất cả các thành phố