2016-04-19 10 views
0

Ich möchte die dritte Tabelle "temp_table1" aktualisieren, indem Sie einige Operationen mit anderen zwei Tabellen "temp_table" "resource1" ausführen.Aktualisieren der dritten Tabelle durch Verbinden zweier Tabellen

temp_table:

+-----------+ 
| temp  | 
+-----------+ 
| 0.46574 | 
+-----------+ 

resource1:

+------------------+ 
| evaluation_value | 
+------------------+ 
|   0.23  | 
|   0.56  | 
|   0.76  | 
|   0.25  | 
|   0.79  | 
+------------------+ 

temp_table1:

+-----------+ 
| temp  | 
+-----------+ 
| 0  | 
+-----------+ 

Jetzt will ich Temp Wert von "temp_table" mit allen evaluation_value von „resource1 subtrahieren "und speichern Sie die subtrahierten Werte, die weniger als 0,25 in" temp_table1 "sind, und ich möchte th aktualisieren e "temp_table1" bei jeder Abfrage.

Ich konstruierte die folgende Abfrage für diese, aber ich werde irgendwo falsch:

update temp_table1 t1 
set t1.temp = (
    select (e.evaluation_value - t.temp) < 0.25 
    from resource1 e 
    Inner join temp_table t) 

Thank you !!!

+0

Mit welchen Werten beginnt die Temperatur? Es klingt, als wolltest du nur in temp, nicht UPDATE einfügen. –

+0

Anfangs hat die Temperatur von "temp_table1" den Wert 0. – user3304748

+0

In Ihren Beispieldaten haben Sie 3 Zeilen in evaluation_value, die nach dem Subtrahieren des Temp-Werts (0,46574) weniger als 0,25 sind. Welche 3 Zeilen in Temp aktualisieren Sie? –

Antwort

0

Jedes Mal, wenn Sie die Abfrage ausführen, sollten Sie vorhandene Werte löschen, dann neue füllen:

TRUNCATE TABLE temp_table1 
GO 

INSERT INTO temp_table1 
SELECT 
    e.evaluation_value - t.temp 
FROM temp_table t 
    CROSS JOIN resource1 e 
WHERE (e.evaluation_value - t.temp) < 0.25 

Das ist, weil UPDATE Daten nur in der aktuell vorhandenen Zeilen ändert, und das ist nicht Ihre Absicht - Sie möchten bekomme jedes Mal neue Ergebnisse. Außerdem kann die Anzahl der Zeilen bei jedem Lauf variieren, so dass UPDATE hier kein guter Kandidat ist.

Ein weiteres Problem ist mit dem JOIN Typ Sie ausgewählt: INNER in Situationen verwendet wird, wo es eine strikte Zuordnung von Datensätzen in einer Tabelle auf dem anderen ist (wie eine ID, die in beiden Tabellen vorhanden ist) und es erfordert, dass Sie festlegen, dass Mapping mit ON Schlüsselwort, während CROSS fügt einfach alles in der ersten Tabelle mit allem in den anderen, wie Sie möchten (und so, ist keine Zuordnung erforderlich).

+0

Großartig !!! Vielen Dank – user3304748

Verwandte Themen