2017-01-22 28 views
0

當我運行下面的查詢:當使用UPDATE與SQL行SET似乎缺少

SELECT COUNT(x.objectID) 
FROM db0..table0 as t 
INNER JOIN db1..table1 as x ON t.objID = x.slaveID 
INNER JOIN db1..table2 as table2 ON table2.sourceID = x.objectID 
WHERE (****) 

我得到268'466結果。然而,當我更新和添加一列db0..table0x.objectID如下,我得到這些項目的145'346到我db0.table0

ALTER TABLE db0..table0 ADD new_objID bigint; 

UPDATE db0..table0 
SET db0..table0.new_objID = x.objectID 
FROM db0..table0 as t 
INNER JOIN db1..table1 as x ON t.objID = x.slaveID 
INNER JOIN db1..table2 as table2 ON table2.sourceID = x.objectID 
WHERE (****) 

有人能看到什麼錯誤?查詢之間的唯一區別是第一個查詢中的第一行被替換爲第二個查詢中的前兩行。

要算在我的表我用最後的新值的數量,

SELECT COUNT(new_objID) 
FROM db0..table0 

這應返回的new_objID所有無NULL實例。

編輯

所以表結構

table0
table0_ID

表1
table1_ID
other_table1_ID

table0表1由table0_ID和table1_ID在許多連接到一個關係。一個table0_ID對應許多table1_ID。我意識到,表2已不再需要 - 在過去,我想從這張表的信息,但不再是。

實際上,我所要做的就是將other_table1_ID條目添加到table0中,將other_table1_ID條目添加到每個table1_ID組的最小值條目中。

問題是這些查詢之間的差異表明我做錯了什麼,我只是不能解決什麼。

查詢一個

SELECT COUNT(table1.table1_ID) 
FROM db0..table0 as table0 
INNER JOIN db1..table1 as table1 
ON table0.table0_ID = table1.table1_ID 
WHERE table1.value IN (SELECT MIN(value) 
    FROM db1..table1 as new_table1 
    WHERE new_table1.table1_ID = table1.table1_ID) 

查詢的兩個

ALTER TABLE db0..table0 ADD newID bigint 

UPDATE db0..table0 
SET db0..table0.newID = table1.other_table1_ID 
FROM db0..table0 as table0 
INNER JOIN db1..table1 as table1 
ON table0.table0_ID = table1.table1_ID 
WHERE table1.value IN (SELECT MIN(value) 
    FROM db1..table1 as new_table1 
    WHERE new_table1.table1_ID = table1.table1_ID) 
+0

你得到你從我的回答如下應用此修復程序後,即使不同行數? – andrews

+0

請編輯您的問題並閱讀如何發佈[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve) – Sami

回答

0

UPDATE:後OP,我們得出的結論是,在這兩個查詢條件,應該有一些討論和問題更新更改爲以下內容:

new_table1.table1_ID = table1.table1_ID應改爲table0.table0_ID = new_table1.table1_ID

然後這兩個SELECT查詢(原始和計數newID字段的計數)返回206146記錄的相同計數。


在你做COUNT(x.objectID)第一查詢,但在UPDATE叫你SET db0..table0.new_objID = x.objID

注意,不同的列名稱:第一種情況下爲x.objectID,第二種情況下爲x.objID

你的第二個查詢更改爲以下:

UPDATE db0..table0 
SET db0..table0.new_objID = x.objectID 
FROM db0..table0 as t 
INNER JOIN db1..table1 as x 
ON t.objID = x.slaveID 
INNER JOIN db1..table2 as table2 
ON table2.sourceID = x.objectID 
WHERE (****) 
+0

這就是您注意到的,那麼您的解決方案在哪裏?答案在哪裏? – Sami

+0

@Sami,是不是明顯的解決方案?無論如何,我已經更新了答案。 – andrews

+0

對不起,這實際上是一個錯字,我改變了實際查詢中的名字(試圖讓它看起來更簡單)。所以這不是問題。 – anonMouse