SQL批量更新,字段增量

时间:2009-06-29 08:15:49

标签: c# sql sqlite

所以我学习了如何使用一个表中的数据作为另一个表中的userId进行批量插入。现在我尝试做同样的事情,但我有一个SQL(迭代)错误。我猜测了语法,我弄错了。在我批量插入订阅后,我想为每个用户添加1个媒体计数。我有一个左连接错误。我该如何纠正?

-edit-我还没有解决这个问题。请帮忙。

注意:我正在使用sqlite ATM,但我正在切换到mysql或MS sql

void updateMediaForSubscribers(long userId, long mediaId, Media_Base.Catagory cat, DateTime currentDate)
{
    command.CommandText =
        "INSERT INTO user_media_subscription (recipientId, mediaId, catagory) " +
        "SELECT watcher, @mediaId, @category " +
        "FROM user_watch WHERE watched=@watched;";
    command.Parameters.Add("@mediaId", DbType.Int64).Value = mediaId;
    command.Parameters.Add("@category", DbType.Int64).Value = cat;
    command.Parameters.Add("@watched", DbType.Int64).Value = userId;
    command.ExecuteNonQuery();

    //near "LEFT": syntax error
    command.CommandText =
        "UPDATE user_data SET mediaMsgCount=mediaMsgCount+1 " +
        "LEFT JOIN user_watch AS w ON w.watcher=user_data.userId " +
        "WHERE w.watched=@watched;";
    command.Parameters.Add("@watched", DbType.Int64).Value = userId;
    command.ExecuteNonQuery();
}

2 个答案:

答案 0 :(得分:2)

UPDATE user_data 
SET mediaMsgCount=mediaMsgCount+1
LEFT JOIN user_watch AS w ON w.watcher=user_data.userId
WHERE w.watched=@watched

看起来它对我不起作用,因为你加入了一个UPDATE查询但没有“FROM”子句,你试过了吗?

UPDATE u
SET u.mediaMsgCount = u.mediaMsgCount+1
FROM user_data u
LEFT JOIN user_watch AS w ON w.watcher=u.userId
WHERE w.watched=@watched

答案 1 :(得分:0)

UPDATE user_data 
SET mediaMsgCount = u.mediaMsgCount + 1 
FROM user_data u LEFT OUTER JOIN user_watch w ON w.watcher = u.userId 
WHERE w.watched=@watched

老实说,我不确定你为什么使用左外连接,因为更新依赖于user_watch ...可能想要将“LEFT OUTER JOIN”更改为“INNER JOIN”。

此外,最好将您的表名前缀为所有者,I.E。 dbo.user_data ...如果你不这样做,那么sql server必须进行查找。