2014-02-05 134 views
0

用简单的英语,我试图从db1获得平均投票数,其中投票是节点类型“文章”,然后将每篇文章的投票平均值插入到“赞”字段中db2.news中的相应行。MySQL组和插入问题

这里是我的凸轮了:

INSERT IGNORE INTO db2.news 
(likes) 
SELECT ROUND(AVG(v.value)/10) 
FROM db1.votes v, db1.node n, db2.news d 
WHERE v.id=n.nid AND n.type='article' AND d.id=n.nid 
GROUP BY v.id; 

查询无差错运行,但它会在DB2垃圾行的负荷只有像场被填满。

我很困扰这个小时,所以感谢您的提示,以解决查询。

回答

1

您的查询是一个插入,它插入内部查询的结果集。但是这个结果集只包含一列和很多行。类似

东西可以帮助例如:

create table votetmp 
SELECT v.id, ROUND(AVG(v.value)/10) voteavg 
FROM db1.votes v, db1.node n, db2.news d 
WHERE v.id=n.nid AND n.type='article' 
GROUP BY v.id; 

update 
    db2.news 
set 
    likes=(select voteavg from votetmp where votetmp.id=news.id) 
+0

你的暗示,让我看到了光明!第2行中的'valueavg'和第4行中的'AND d.id = n.nid'是多余的。请更新ansewr,我会接受它。非常感谢。 – qliq