2009-06-29 5 views
0

J'ai donc appris comment faire un encart groupé en utilisant les données d'une table en tant qu'utilisateur d'une autre table. Maintenant, j'ai essayé de faire la même chose mais j'ai une erreur SQL (ite). J'ai pris une estimation de la syntaxe et je me suis trompé. Après l'insertion en vrac dans l'abonnement, je veux ajouter 1 à chacun des médias compte des utilisateurs. J'ai une erreur de jointure à gauche. Comment puis-je le corriger?Mise à jour groupée de SQL, un incrément de champ

-edit- Je n'ai pas encore résolu ce problème. S'il vous plaît aider.

NOTE: J'utilise ATM sqlite mais je suis passer à MySQL ou 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(); 
} 

Répondre

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

On dirait que ça ne marchera pas pour moi, parce que vous vous joignez à une requête de mise à jour mais sans clause « From », avez-vous essayé:

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] 

Honnêtement, je ne suis pas vraiment sûr pourquoi vous utilisez une jointure externe gauche depuis la mise à jour dépend de user_watch ... pourrait vouloir changer le "LEFT OUTER JOIN" en un "INNER JOIN".

Aussi, c'est une bonne idée de préfixer votre nom de table avec le propriétaire, I.E. dbo.user_data ... si vous ne faites pas cela, alors le serveur sql doit faire une recherche.

+0

externe rejoindre!?! la jointure gauche est une jointure externe? J'ai copié collé votre code et j'obtiens une erreur près de FROM (syntaxe). J'ai changé user_data u à user_data AS et toujours pas de chance. Il semble que je ne peux pas utiliser FROM après SET. J'utilise actuellement SQLite qui utilise à peu près la même syntaxe. Je me demande ce qui est incorrect à ce sujet? J'ai pris une conjecture complète quand j'ai écrit l'original. –

Questions connexes