![](/img/trans.png)
[英]Fluent NHibernate 1.1 with Microsoft Access 2007 Database
[英]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
值的行。
您可以通過以下方法測試這是否是問題的原因:
macAddress
所有索引,然后重試查詢。 另外,在執行上述任何一個步驟之前,您都應備份數據庫文件,以防萬一出問題。
在我使用Access數據庫的經驗中,索引損壞很少見,但有可能發生。 Compact&Repair一直為我治愈它。 無論您是否要修復損壞,例行的Compact都是一種有用的做法。 附帶好處之一是它可以更新數據庫統計信息,以便db引擎在決定如何處理查詢時可以使用最新和最佳的信息。 從2000年開始使用Access版本,當Access發現數據問題時,運行Compact會自動觸發修復。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.