我正在MS Access中編寫一個簡單的配置程序。有兩種規則,強制性和無效性。對於無效的規則,我用這個SQL,它工作正常:小姐訪問:刪除查詢JOIN和NOT EQUAL運算符
DELETE DISTINCTROW RuntimeBOM.*
FROM CurrentInvalid
INNER JOIN RuntimeBOM ON ([RuntimeBOM].[OPTION] = [CurrentInvalid].[Invalid option])
AND ([RuntimeBOM].[FEATURE] = [CurrentInvalid].[Invalid feature])
WHERE RuntimeBOM.SessionID=fOSUserName();
對於我tryed這一個強制性的規則,但它不會影響任何記錄在表中,的確,它會返回運行時錯誤「3086」(這是不可能從指定表中刪除):
DELETE DISTINCTROW RuntimeBOM.*
FROM CurrentMandatory
INNER JOIN RuntimeBOM ON (RuntimeBOM.FEATURE = CurrentMandatory.MandatoryFeature)
AND (RuntimeBOM.OPTION <> CurrentMandatory.MandatoryOption)
WHERE RuntimeBOM.SessionID=fOSUserName();
fOSUserName()是一個VBA函數來獲取其中運行應用程序的計算機的用戶名。
╔══════════════╗ ╔══════════════════════════════════════════╗ ╔════════════════════════════════════════════╗
║ RuntimeBOM ║ ║ CurrentInvalid ║ ║ CurrentMandatory ║
╟───────┬──────╢ ╟────┬──────┬───────────────┬──────────────╢ ╟────┬──────┬────────────────┬───────────────╢
║FEATURE│OPTION║ ║Feat│Option│Invalid feature│Invalid option║ ║Feat│Option│MandatoryFeature│MandatoryOption║
╠═══════╪══════╣ ╠════╪══════╪═══════════════╪══════════════╣ ╠════╪══════╪════════════════╪═══════════════╣
║FT001 │OP001 ║ ║FTaa│OPaa │FT001 │OP001 ║ ║FTaa│OPaa │FT002 │OP008 ║
║FT001 │OP002 ║ ║FTaa│OPaa │FT001 │OP002 ║ ╚════╧══════╧════════════════╧═══════════════╝
║FT001 │OP003 ║ ║FTaa│OPaa │FT001 │OP004 ║
║FT001 │OP004 ║ ║FTaa│OPaa │FT001 │OP005 ║
║FT001 │OP005 ║ ╚════╧══════╧═══════════════╧══════════════╝
║FT002 │OP006 ║
║FT002 │OP007 ║
║FT002 │OP008 ║
║FT002 │OP009 ║
║FT002 │OP010 ║
╚═══════╧══════╝
在這種情況下想象中的用戶選擇了「美洲自由貿易區」和「OPAA」的地方,因爲這個原因「CurreintINvalid」和「CurrentMandatory」以這種方式填充。對於無效規則的SQL,刪除RuntimeBOM內的記錄,其中FEATURE等於FT001,OPTION等於「OP001」,「OP002」,「OP004」,「OP005」(如在「CurrentInvalid」中定義的那樣)。強制規則的SQL刪除RuntimeBOM中的所有記錄,其中FEATURE等於FT002,OPTION不等於「OP008」(如在「CurrentMandatory」中定義的那樣)。 預期結果:
╔══════════════╗
║ RuntimeBOM ║
╟───────┬──────╢
║FEATURE│OPTION║
╠═══════╪══════╣
║FT001 │OP003 ║
║FT002 │OP008 ║
╚═══════╧══════╝
謝謝!
檢查問題的'SELECT'版本'DELETE'查詢。它是一個可更新的查詢嗎?那些聯合表或查詢本身,特別是* CurrentMandatory *? – Parfait
感謝您的回答,他們是表格,奇怪的是第一個刪除工作正常。而第二號。如果將第二個查詢轉換爲SELECT,它將起作用。 – Axel