câu trả lời Straight này: bạn không thể. Cơ sở dữ liệu Access Engine đơn giản không hỗ trợ cú pháp truy vấn con vectơ SQL-92 vani ngay cả khi nó được gọi là chế độ truy vấn ANSI-92 của nó.
Bạn buộc phải sử dụng cú pháp độc quyền của riêng nó mà không thực thi yêu cầu vô hướng tức là không an toàn và sẽ chọn giá trị tùy ý và âm thầm **. Hơn nữa, ngoài các cấu trúc đơn giản, nó không hoạt động chút nào, đáng chú ý nhất là truy vấn phụ của bạn (nếu bạn được phép sử dụng một ở vị trí đầu tiên) sử dụng một hàm được đặt (MAX
, SUM
, v.v.) - xem this article cho một số cách giải quyết thực sự không đạt yêu cầu .
Xin lỗi là tiêu cực nhưng đây thực sự là cú pháp cơ bản và tôi không thể hiểu tại sao nhóm Access vẫn chưa sửa đổi. Đó là lý do không thể tranh cãi số một lý do tại sao tôi không thể lấy cơ sở dữ liệu truy cập nghiêm túc nữa.
Để chứng minh các hành vi không an toàn của Access độc quyền UPDATE..JOIN..Set
cú pháp
CREATE TABLE Users
(
User_ID CHAR(3) NOT NULL,
Company_ID CHAR(4) NOT NULL,
UNIQUE (Company_ID, User_ID));
CREATE TABLE VendorRegKeys
CreatedBy_ID CHAR(3) NOT NULL UNIQUE,
Company_ID CHAR(4));
INSERT INTO Users VALUES ('Kip', 'MSFT');
INSERT INTO Users VALUES ('Kip', 'AAPL');
INSERT INTO VendorRegKeys VALUES ('Kip', NULL);
UPDATE VendorRegKeys
INNER JOIN Users ON Users.User_ID = VendorRegKeys.CreatedBy_ID
SET VendorRegKeys.Company_ID = Users.Company_ID;
Khi thực hiện báo cáo cập nhật trong Access, giao diện người dùng cảnh báo chúng tôi
You are about to update 2 row(s).
mặc dù thực tế chỉ có một hàng trong bảng VendorRegKeys
!
Điều gì xảy ra trong thực tế chỉ là một trong các giá trị mà chúng tôi sẽ sử dụng để cập nhật cột trong hàng đơn đó mà không có cách nào đáng tin cậy để dự đoán nó sẽ là gì.
Với cú pháp truy vấn con số vô hướng của SQL chuẩn, bạn sẽ gặp lỗi và câu lệnh sẽ không thực hiện được, được cho là chức năng mong muốn (cú pháp MERGE
của SQL tiêu chuẩn cũng hoạt động theo cách này).
Cảm ơn, điều này đã giúp tôi rất nhiều! –
Lưu ý: Nếu Người dùng là Truy vấn trái ngược với Bảng và do đó không thể cập nhật, kết quả là "Hoạt động phải sử dụng truy vấn có thể cập nhật". –