2009-04-23 25 views
0

Ich erkannte, dass ich ein Varchar-Attribut als Index/Schlüssel in einer Abfrage verwendet, und das ist meine Abfrage Leistung zu töten. Ich versuche, in meiner Precienct-Tabelle zu suchen und die Ganzzahl-ID zu erhalten, und aktualisiere dann meinen Datensatz in der Haushaltstabelle mit dem neuen Int-FK, der in einer neuen Spalte platziert ist. das ist der sql, den ich bisher geschrieben habe. aber ich bekomme eineWert in Tabelle aus einer anderen Tabelle aktualisieren

Fehler 1093 Sie können Zieltabelle "voterfile_household" nicht für die Aktualisierung in FROM-Klausel angeben, und ich bin mir nicht sicher, wie Sie es beheben.

UPDATE voterfile_household 
SET 
PrecID = (SELECT voterfile_precienct.ID 
     FROM voterfile_precienct INNER JOIN voterfile_household 
     WHERE voterfile_precienct.PREC_ID = voterfile_household.Precnum); 
+0

Ich denke, mein Gehirn würde schmelzen, wenn ich mit Tabellen mit falscher Schreibweise arbeiten müsste. Bitte sag mir, das ist Dialekt oder sowas. – nickf

+0

Ich hatte das nicht einmal bemerkt, ich glaube, ich habe es falsch falsch geschrieben und dann immer wieder auf das erste Mal, als ich es eintippte, verwiesen. – gsueagle2008

Antwort

2

Versuchen:

update voterfile_household h, voterfile_precienct p 
    set h.PrecID = p.ID 
where p.PREC_ID = h.Precnum 

Hier finden Sie aktuelle Update Referenz here.

In ähnlicher Weise können Sie innere Verbindung Syntax auch verwenden.

update voterfile_household h inner join voterfile_precienct p on (h.Precnum = p.PREC_id) 
    set h.PrecID = p.ID 
0

Was passiert, wenn die Unterabfrage mehr als ein Ergebnis zurückgibt? Deshalb funktioniert es nicht.

Auf SQL Server können Sie diese Art von Sache funktionieren, wenn die Unterabfrage "SELECT TOP 1 ...", nicht sicher, ob mysql es auch akzeptieren, wenn Sie eine "Grenze 1" zur Unterabfrage hinzufügen.

Ich denke auch, das ist so ziemlich ein Duplikat von this question ("Can I have an inner SELECT inside of an SQL UPDATE?") von früher heute.

0

Erstens Ihr Index auf einem varchar ist nicht immer eine schlechte Sache, wenn es nicht ein Schlüssel ist, wie viel von dem Gebiet schrumpfen können Sie Index Index nur die ersten 10 Zeichen sagen, oder so.

Zweitens wird es Sie nicht so tun, als ob es eine Menge ist, die zurückgegeben wird, könnte es brechen.

+0

Ich hätte sagen sollen, dass das Varchar ein PK ist – gsueagle2008

Verwandte Themen