Seite 1 von 1

Updaten einer Tabelle mit dem Inhalt einer anderen Tabelle

Verfasst: Fr 11. Mär 2016, 17:48
von scientific
Hi Leute!

Ich hab jetzt ein SQL-Problem, von dem ich noch nicht weiß, wie man das macht.

Ich hab einerseits eine Tabelle mit Importieren Inhalten. Jeder Datensatz hat eine eindeutige ID und einen Timestamp. Außerdem gibt es noch eine Boolean-Spalte, wo ich kennzeichne, ob ich diesen Datensatz übernehmen möchte, oder nicht. (Das geschieht manuell nach dem Import)

Und dann gibt es eine Tabelle (Stammtabelle) wo ich diese Importe integrieren möchte. Diese Tabelle hat wiederum eine eindeutige ID-Spalte, eine Spalte, worin die ID der Import-Tabelle vorkommt, und ebenso eine Timestamp-Spalte.
Wenn der Timestamp des Imports jünger ist, als jener der Stammtabelle, dann soll die Stammtabelle geupdatet werden. Sonst nicht. Gibt es in der Stammtabelle keinen Datensatz, welcher die ID des Imports enthält, soll der Importdatensatz hinzugefügt werden.

Ich hoffe, ich hab das halbwegs verständlich formuliert.

Leider weiß ich nicht, wie ich ein Statement formulieren muss, welches diese Kriterien erfüllt.

Wie macht man sowas richtig? Geht das überhaupt mit reinem SQL, oder muss ich dazu ein Skript schreiben?

lg scientific

Re: Updaten einer Tabelle mit dem Inhalt einer anderen Tabelle

Verfasst: Fr 11. Mär 2016, 19:42
von gogo
2 Statements:

Code: Alles auswählen

1. 
Insert into Stammtabelle 
	(Feld1, Feld2 ...) 
	values 
	(Select Feld1, Feld2 ... from Importtabelle 
		where NOT exists 
			(Select * from Stammtabelle where Stammtabelle.ID=Importtabelle.ID)
	)

2. 
Update Stammtabelle s, Importtabelle i set s.Feld1=i.Feld1 where s.Timestamp<i.Timestamp


Re: Updaten einer Tabelle mit dem Inhalt einer anderen Tabelle

Verfasst: Fr 11. Mär 2016, 20:18
von scientific
Vielen Dank!

So ähnlich hab ichs mir gedacht... aber
gogo hat geschrieben: 2.

Code: Alles auswählen

Update Stammtabelle s, Importtabelle i set s.Feld1=i.Feld1 where s.Timestamp<i.Timestamp

Gibt die Fehlermeldung

Code: Alles auswählen

"Unexpected Token: , required: SET
Ach ja, hier im Einsatz eine hsqldb 2.3.3

lg scientific

Re: Updaten einer Tabelle mit dem Inhalt einer anderen Tabelle

Verfasst: Sa 12. Mär 2016, 08:50
von RobertG
Hallo scientific,

beim Update kann nur eine Tabelle mit einem Updatebefehl versehen werden. In dem Code stehen so aber zwei Tabellen als Zieltabellen des Updates. Versuche das Ganze einmal in der folgenden Art:

Code: Alles auswählen

Update "Stammtabelle" AS "s" SET "Name" = IFNULL((SELECT "Name" FROM "Importtabelle" WHERE "ID" = "s"."ID" AND "Zeitstempel" > "s"."Zeitstempel"),"Name"), "Zeitstempel" = IFNULL((SELECT "Zeitstempel" FROM "Importtabelle" WHERE "ID" = "s"."ID" AND "Zeitstempel" > "s"."Zeitstempel"),"Zeitstempel")
"Name" und "Zeitstempel" sind hier gedachte Felder der zu importierenden Tabelle.

Gruß

Robert