2009-06-29 4 views
0

Итак, я научился делать объемную вставку, используя данные из одной таблицы в качестве userId из другой таблицы. Теперь я попытался сделать то же самое, но у меня есть ошибка SQL (ite). Я угадал синтаксис, и я понял, что это неправильно. После того, как я вставляю в подписку, я хочу добавить 1 к каждому счету пользователей. У меня ошибка слева. Как это исправить?SQL bulk update, приращение поля

-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 [email protected];"; 
    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 [email protected];"; 
    command.Parameters.Add("@watched", DbType.Int64).Value = userId; 
    command.ExecuteNonQuery(); 
} 

ответ

2
UPDATE user_data 
SET mediaMsgCount=mediaMsgCount+1 
LEFT JOIN user_watch AS w ON w.watcher=user_data.userId 
WHERE [email protected] 

Похоже, он не будет работать со мной, потому что вы присоединяетесь в запросе 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 [email protected] 
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 [email protected] 

Честно говоря, я не совсем уверен, почему вы используете левое внешнее соединение с обновлением зависит от user_watch ... может потребоваться изменить «LEFT OUTER JOIN» на «INNER JOIN».

Кроме того, это хорошая идея приписать имя вашей таблицы владельцу, I.E. dbo.user_data ... если вы этого не сделаете, тогда сервер sql должен выполнить поиск.

+0

внешнее соединение!?! left join - это внешнее соединение? Я скопировал ваш код, и я получаю сообщение об ошибке рядом с синтаксисом FROM (синтаксис). Я изменил user_data u на user_data AS u и до сих пор не повезло. Похоже, я не могу использовать FROM после SET. В настоящее время я использую SQLite, который в значительной степени использует тот же синтаксис. Интересно, что это неправильно? Я сделал полное предположение, когда написал оригинал. – 2009-06-29 20:07:49