2010-05-12 73 views
1

我正在嘗試使用包含相同值的記錄數來更新.mdb表中的記錄。ADO SQL更新表與查詢組的結果

下面的SQL不起作用,但我認爲給出了我試圖實現的內容。

UPDATE table1 AS A 
INNER JOIN (SELECT PH_BSP , Count(PH_BSP) AS PHCOUNT FROM table1 GROUP BY PH_BSP) AS B 
ON A.PH_BSP=B.PH_BSP 
SET A.PH_SORT = B.PHCOUNT; 

任何想法?

回答

0

如果您在訪問這樣做,你需要使用域聚合函數:

UPDATE table1 
SET PH_SORT = DCount("PH_BSP","Table1","PH_BSP='" & PH_BSP & "'") 

上述假設PH_BSP是一個文本字段,刪除單引號,如果它是數字。

+0

感謝您的信息。如果域聚合函數是訪問表執行此操作的唯一方法,那麼我認爲它返回到「分組依據」到臨時表中並加入到原始表中。我每天處理成千上萬條記錄(在許多數據庫中),而且DCount速度太慢(比如數小時慢) 再次感謝您的幫助 – brett 2010-05-12 11:17:50

0

你試過類似的東西嗎?

update table1 as a 
    set a.ph_sort = (
     select COUNT(b.ph_bsp) as phcount 
      from table1 b 
      where b.ph_bsp = a.ph_bsp) 

我假設SQL Server在這裏。

但是這個或類似的東西都應該這樣做,我想。

+0

表是一個.mdb數據庫,這樣進出這裏去... 我想上面的SQL卻得到了一個消息: 「操作必須使用一個可更新的查詢」 – brett 2010-05-12 01:56:17

+0

這個消息說有沒有更新的可能去表演。這意味着在某種程度上DML有某個錯誤。實際上,我試圖在示例代碼中設置a.ph_bsp =(select ...)而不是a.ph_sort。也許有這個更新的樣本? – 2010-05-12 02:16:06

+0

@brett:嘗試省略'AS A',也許這就是爲什麼表格變得不可更新的原因 – 2010-05-12 02:32:04

1

未經檢驗的,但設置了這一論斷正是如此這應該解決您的問題

UPDATE A 
SET A.PH_SORT = B.PHCOUNT 
From table1 AS A 
INNER JOIN (SELECT PH_BSP , Count(PH_BSP) AS PHCOUNT FROM table1 GROUP BY PH_BSP) AS B 
ON A.PH_BSP=B.PH_BSP 

編輯: 你的問題可能是從你的子查詢,我會嘗試把一部分到一個單獨的訪問查詢,看看如何它走了。從內存來看,我用Access和子查詢有很多麻煩,方括號有時也有幫助,但內存不可靠。

+0

+1這也是一種衆所周知的形式,沒想到。 =) – 2010-05-12 03:02:42

+0

在訪問這產生: 語法錯誤(缺少運算符)查詢表達式B.PHCOUNT 從表1 AS甲​​ INNER JOIN(SELECT PH_BSP,COUNT(PH_BSP)AS PHCOUNT FROM表1 GROUP BY PH_BSP)AS乙 上的.PH_BSP = B.PH_BSP – brett 2010-05-12 05:07:05