2012-03-13 61 views
1

http://imageshack.us/photo/my-images/839/noeuds.jpg/使用同一表中的其他記錄的SQL更新信息

剛添加了一個真實表的鏈接。 Noeud 116要高度重視已INSEE_COM與信息更新117(116是117的記錄相關的N_AMONT)


我有這個表(noueds):

NOEUD TYPE_MAT N_AMONT LONG_CABLE ADDRESS 
123  REP  100  12   abc 
130  AMP  229  12    
173  PPP  130  1   AAA 

我想編寫一個UPDATE查詢來填充從節點的所有數據地址具有一個後NODES.LONG_CABLE = 1

例如:

我搜索所有的節點即公頃ve LONG_CABLE = 1,給我noeud 173;

SELECT * 
    FROM noeuds AS tab, 
     [SELECT noeuds.* FROM noeuds WHERE (((noeuds.LONG_CABLE)=" 1"))]. AS a1 
WHERE (((tab.NOEUD)=([a1].[n_amont])) AND ((tab.ADDRESS)="  ")); 

我使用的MS Access:那麼130之前的節點應該有173

相同的地址我可以搜索將被更新的所有節點。

編輯:

據updateing僅onrecords選擇用於1米電纜導線。有沒有人知道如何使noeuds.n_amont指出的不是在選定的表格中更新,而是在名爲noeuds的原始表格上更新?

+0

爲什麼'(((noeuds.LONG_CABLE)=「1」))中的三個括號會在'noeuds.LONG_CABLE =「1」'時也同樣如此?爲什麼所有這些報價都圍繞LONG_CABLE的價值?當然,你不是在CHAR(n)列中存儲純數字數據,對嗎?子選項周圍的方括號是非常規的。你不能在FROM子句中使用顯式JOIN符號而不是逗號分隔的表達式嗎? – 2012-03-13 20:22:38

+0

操縱原始數據庫的程序不使用數字值。當noeuds.LONG_CABLE爲空時,它有5個空格字符,如「」。 – Odones 2012-03-13 20:25:49

+0

正方形將M $ ACCESS程序插入自動。 – Odones 2012-03-13 20:27:32

回答

1

我提供這作爲兩個查詢,所以你可以看到,如果第一個是returnin g要更新的地址和代碼的正確組合。

FirstQ

SELECT n.NOEUD, n.ADDRESS, 
    (SELECT TOP 1 Noeud 
     FROM Noeuds WHERE Noeud<n.Noeud 
     ORDER BY Noeud DESC) AS CodeToUpdate 
FROM noeuds AS n 
WHERE n.LONG_CABLE="1" 
ORDER BY n.NOEUD 

更新

UPDATE noeuds 
INNER JOIN FirstQ 
ON noeuds.NOEUD = FirstQ.CodeToUpdate 
SET noeuds.ADDRESS = [FirstQ].[ADDRESS]</s> 

編輯再評論

SELECT a.noeud, 
     a.long_cable, 
     a.address, 
     noeuds_1.n_amont, 
     noeuds_1.address 
FROM (SELECT * 
     FROM noeuds 
     WHERE long_cable = '1') AS a 
     INNER JOIN noeuds AS noeuds_1 
     ON a.n_amont = noeuds_1.noeud; 

更新#2

UPDATE (SELECT n_amont, 
       address 
     FROM noeuds 
     WHERE long_cable = '1') AS a 
     INNER JOIN noeuds AS n 
     ON a.n_amont = n.noeud 
SET n.address = a.Address 
WHERE n.address IS NULL 
+0

你如何鏈接這兩個?我做錯的方式給了我不好的語法。我習慣只做更簡單的sql語句。 – Odones 2012-03-13 22:39:07

+0

將標記爲FirstQ的SQL的第一位保存爲名爲FirstQ的查詢,但請檢查它是否在運行時爲您提供期望的數據。第二個查詢是更新查詢,因此請確保在測試之前備份了數據庫。 – Fionnuala 2012-03-13 22:44:39

+0

謝謝,但節點不是按順序排列的。它需要搜索正確的節點,採用a_mont節點,並使用之前找到的地址進行可更新的更新。 – Odones 2012-03-13 22:47:58

0

鑑於該

  • 節點在1
  • 前一個節點沒有沒有開始總是=節點沒有-1

你可以做以下(不知道它的工作原理與訪問雖然):

UPDATE TableName 
SET spalteA = t2.SpalteB 
FROM TableName AS t1 
INNER JOIN TableName AS t2 
ON t2.node = t1.node - 1 
WHERE t1.node > 1 
+0

M $訪問不使用「FROM」。這一個不起作用。而前一個節點並不總是我想要更新的節點。序列由NOEUD和N_AMONT給出 – Odones 2012-03-13 20:32:11

相關問題