2017-01-22 83 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

相关问题