簡體   English   中英

Microsoft Access 2007中的查詢問題

[英]Trouble with query in Microsoft Access 2007

我有兩個表,分別稱為Live和Certified。 兩個表中都存在某些列,而僅一個表中存在一些列。 兩個表都有一個名為“ macAddress”的字段。 這些macAddress值大多數在兩個表中重疊,但是有一些記錄僅存在於一個表中。

當在認證表中不存在該macAddress時,我想一種方法從Live表中查找具有macAddress的所有行。

以下是我試過到目前為止:

SELECT Live.*
FROM Live
WHERE macAddress NOT IN
(SELECT macAddress FROM certified);

我還嘗試了左外部聯接:

SELECT DISTINCT Live.*
FROM Live LEFT OUTER JOIN certified ON Live.macAddress = certified.macAddress
WHERE certified.macAddress IS NULL;

通過這兩個查詢,我僅獲得列標題,但沒有來自Live表的記錄。

我在Access 2007中使用來自Live的示例數據和certified的示例數據檢查了此查詢。

SELECT DISTINCT Live.*
FROM
    Live
    LEFT OUTER JOIN certified
    ON Live.macAddress = certified.macAddress
WHERE certified.macAddress IS NULL;

該查詢為我提供了該結果集,這就是我認為您要的。

macAddress        some_text
00-0C-29-80-BA-A3 bar

Live

macAddress        some_text
00-0C-29-80-BA-A3 bar
38-60-77-77-D0-D4 foo

certified

macAddress
38-60-77-77-D0-D4

假設您已經驗證了Live.macAddress值,這些值在certified中不存在,但不會與您的數據在同一查詢中返回,可能您已對macAddress索引並且索引已損壞。 在這種情況下,您可能有Live.macAddress值存在於表中,但未在索引中找到……它們要么亂碼要么完全丟失。 因此,當數據庫引擎使用索引從Live檢索行時,將不考慮索引中沒有macAddress值的行。

您可以通過以下方法測試這是否是問題的原因:

  1. 在數據庫上運行壓縮和修復。 然后再次嘗試查詢。
  2. 如果第一個建議不能解決問題,請刪除基於macAddress所有索引,然后重試查詢。

另外,在執行上述任何一個步驟之前,您都應備份數據庫文件,以防萬一出問題。

在我使用Access數據庫的經驗中,索引損壞很少見,但有可能發生。 Compact&Repair一直為我治愈它。 無論您是否要修復損壞,例行的Compact都是一種有用的做法。 附帶好處之一是它可以更新數據庫統計信息,以便db引擎在決定如何處理查詢時可以使用最新和最佳的信息。 從2000年開始使用Access版本,當Access發現數據問題時,運行Compact會自動觸發修復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM