2009-06-29 5 views
0

So lernte ich, wie eine Masseneinfügung mit Daten aus einer Tabelle als userId aus einer anderen Tabelle. Jetzt habe ich versucht, das gleiche zu tun, aber ich habe einen SQL (ite) -Fehler. Ich habe die Syntax geschätzt und es falsch verstanden. Nachdem ich in die Subskription in Masse eingefügt habe, möchte ich 1 zu jeder Benutzermedienzählung addieren. Ich habe einen Linksbindungsfehler. Wie korrigiere ich es?SQL Bulk-Update, ein Feld Inkrement

-edit- Ich habe das noch nicht lösen. Bitte helfen Sie.

HINWEIS: Ich verwende SQLite ATM, aber ich bin der Umstellung auf MySQL oder 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(); 
} 

Antwort

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

Sieht aus wie es mir nicht funktionieren wird, weil Sie in einer UPDATE-Abfrage, aber ohne eine "FROM-Klausel" Beitritt, haben Sie versucht:

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] 

Ehrlich gesagt, ich bin nicht wirklich sicher, warum Sie verwenden eine linke seit dem Update Outer-Joins ist abhängig von user_watch ... könnte den "LEFT OUTER JOIN" zu einem "INNER JOIN" ändern.

Auch ist es eine gute Idee, Ihren Tabellennamen mit dem Eigentümer, I.E. dbo.user_data ... wenn Sie das nicht tun, dann muss der SQL Server eine Suche durchführen.

+0

Outer-Joins!?! linker Join ist ein äußerer Join? Ich kopierte Ihren Code eingefügt und ich bekomme einen Fehler in der Nähe von (Syntax). ich habe user_data u zu user_data AS u geändert und immer noch kein Glück. Es sieht so aus, als könnte ich FROM nach SET nicht benutzen. Ich benutze derzeit SQLite, die ziemlich die gleiche Syntax verwendet. Ich frage mich, was ist daran falsch? Ich habe eine komplette Schätzung gemacht, als ich das Original schrieb. –

Verwandte Themen