Массовое обновление SQL, приращение поля - PullRequest
0 голосов
/ 29 июня 2009

Итак, я узнал, как выполнить массовую вставку, используя данные из одной таблицы в качестве идентификатора пользователя из другой таблицы. Теперь я попытался сделать то же самое, но у меня ошибка 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 ]

2 голосов
/ 24 февраля 2010
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
0 голосов
/ 29 июня 2009
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 должен выполнить поиск.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...