# Update Table1 mit Relationship Table2



## Chriss_07 (23. Jun 2010)

Ich möchte eine Zelle im Table1 verschieben, wenn diese im Table2 vorkommt.
Das kann man doch mit 
	
	
	
	





```
UPDATE
```
realisieren?
Folgendermaßen ist meine bisherige Herangehensweise:

```
UPDATE table1 SET wohnort = ort, ort = ''
```
Damit soll der Wert in ORT zu WOHNORT verschoben werden und der Wert in ORT wird gelöscht.
Aber nur wenn dieser Ort im TABLE2 vorkommt.
Also habe ich das so gemacht:

```
UPDATE table1, table2 SET wohnort = ort, ort = '' WHERE ort.table1 = ort.table2
```
Nur dann bekomme ich ein ERROR: 
	
	
	
	





```
near ",": syntax error
```
Ich weiß nicht wie ich den TABLE2 referenzieren kann?


----------



## Gast2 (24. Jun 2010)

Das geht wiedermal mit einem Subselect.

Probier mal 

```
UPDATE table1 SET wohnort = ort, ort = '' WHERE ort IN (SELECT ort FROM table2)
```


----------



## Chriss_07 (24. Jun 2010)

Danke fassy,:toll:
das funktioniert.
Gruß Christian


----------



## Chriss_07 (25. Jun 2010)

Ich habe dazu nochmal eine Frage.
Wenn ich den Query um zusetzliche Pflichtfelder erweitere, bekomme ich wirre Ausgaben.

```
UPDATE table1 SET wohnort = ort, ort = '' WHERE datum = '"+DateUtils.now()+"' AND rb = '1' AND ort IN (SELECT ort FROM table2)OR zielort IN (SELECT ort FROM table2);
```

Ich habe also als weitere Felder das Datum und Rb(0/1), sowie den Zielort, der ebenfalls ein Ort aus Table2 sein kann. Das Datum ist entweder Gestern oder Heute. Rb ist 0 oder 1. 
Nur diese Spalten sollen genommen werden (Gestern/1). Genau hier soll dann der Ort zu Wohnort verschoben werden, wenn denn Ort ODER Zielort ein Ort von Table2 sind/ist.
Spalten die das Datum von Heute oder den Rb0 haben sollen nicht berücksichtigt werden, selbst wenn Ort oder Zielort als Ort in Table 2 ist.
Ja
Meistens verschiebt er den Ort nicht. Wenn der Zielort ein Ort von T2 ist und das Datum von Heute, dann verschiebt er den Ort auch...... Also da mach ich doch irgendwie was falsch.


----------



## Gast2 (25. Jun 2010)

Die Klammerung deiner WHERE-Clause wird wohl das Problem sein, z.B. alleine das der "zielort" gefunden wird macht die ganze Clause wahr. Ich glaube kaum das es das ist was du willst.

Ohne jetzt genau gelesen zu haben was du willst:

```
PDATE table1 SET wohnort = ort, ort = '' WHERE 
datum = '"+DateUtils.now()+"' AND rb = '1' -- datum UND rb muss passen
AND  ( ort IN (SELECT ort FROM table2)OR zielort IN (SELECT ort FROM table2) ); -- UND ort ODER zielort muss passen
```


----------



## Chriss_07 (25. Jun 2010)

Jau Perfekt.
Klammern war auch mein Verdacht, nur hatte ich die falsch gesetzt und lieber nochmal nachgefragt.

Wenn ich ein zweites 
	
	
	
	





```
UPDATE
```
 mit ranhängen möchte um den Rb0 abzufragen, also

```
UPDATE table1 SET wohnort = zweitsitz, zweitsitz = '' WHERE datum = '"+DateUtils.now()+"' AND rb = '0'
```
 dann habe ich beide UPDATE mit


```
.....IN (SELECT ort FROM table2); " + " UPDATE table1 SET wohnort = zweitsitz,.......
```
 verbunden. Das zweite durchläuft er nicht. Kannst du mir da mal den Fehler aufzeigen?
Oder ist eine 
	
	
	
	





```
CASE
```
Anweisung besser?


----------



## Gast2 (26. Jun 2010)

Du kannst in einem Update Statement nur einmal das Keyword UPDATE verwenden. In deinem Fall würde ich das zweite Update in einem separten Call zur DB machen und nicht versuchen das in das erste Update mit reinzustopfen. Das ginge theoretisch auch - aber dann wird das sQL langsam unleserlich und da hast du wirklich nichts von. Spätestens in einem Jahr verstehst du es selber nicht mehr. Dein Code sollte leicht lesbar und wartbar bleiben.


----------

