直接的答案:不能。 Access數據庫引擎簡單地不支持vanilla SQL-92標量子查詢語法,即使在它自己的所謂ANSI-92查詢模式下。
您不得不使用自己的專有語法,它不強制執行標量要求,即不安全,並會隨意選擇一個值並默默**。此外,除了簡單的結構之外,它根本不起作用,最顯着的是你的子查詢(如果你被允許首先使用一個)使用set函數(MAX
,SUM
等) - 請參閱this article以獲得一些非常令人不滿意的解決方法。
對不起,但這是真正的基本語法,我不明白爲什麼Access團隊還沒有得到解決它。這是我無法認真考慮Access數據庫引擎的無可爭議的頭號原因。
爲了證明訪問專有UPDATE..JOIN..Set
語法
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;
在Access中執行更新語句,該UI警告我們
You are about to update 2 row(s).
儘管事實上的不安全行爲,只有在VendorRegKeys
表中有一排!
在實踐中發生的情況只是我們用來更新該行中列的值之一,沒有一個可靠的方法來預測它會是什麼。
使用標準SQL的標量子查詢語法,您將收到一個錯誤,並且該語句將無法執行,這可以說是所需的功能(標準SQL的MERGE
語法的行爲也如此)。
謝謝,這幫了我很多! – 2011-08-04 14:24:10
注意:如果用戶是查詢而不是表,並因此不可更新,則結果爲「操作必須使用可更新查詢」。 – 2011-12-20 22:23:47