MS SQL 2008 - Update Statement

Alles rund um die Software-Entwicklung: Programme, Skripte, Projekte etc.
Antworten
Benutzeravatar
Viprex
Vice Admiral
Turtleboard Veteran
Turtleboard Veteran
Beiträge: 4590
Registriert: 08.03.2004, 18:33
Wohnort: Hohenlockstedt
Kontaktdaten:

MS SQL 2008 - Update Statement

Ungelesener Beitrag von Viprex » 26.01.2012, 13:04

Es ist lange her und ich bin gerade zu blöd: Ich bekomme ein MS SQL 2008 Update Statement nicht so hin, wie ich es gerne möchte. Evtl. kann mir einer kurz helfen?

Tabelle1

Code: Alles auswählen

ID    STR_AUTOR    L_BEREICH    STR_TEXT
1         A                       XYZ
2         B                       XYZ
3         C                       XYZ
4         A                       XYZ
5         C                       XYZ
6         A                       XYZ
7         B                       XYZ
8         B                       XYZ
9         B                       XYZ
10        C                       XYZ
In dieser kompletten Tabelle soll L_BEREICH gefüllt werden. STR_TEXT ist ein frei eingegebener Text von STR_AUTOR und hier nicht relevant (soll nur verdeutlichen, dass derselbe STR_Autor mehrfach vorkommen kann.

Tabelle 2

Code: Alles auswählen

ID    FKLID    STR_Name   STR_TYP
1        5         A       oben
2        2         B       unten
3        5         A       oben
4        1         C       unten
5        4         D       oben
6        33        E       oben
7        6         D       unten
In dieser Tabelle ist STR_Name = STR_Autor aus Tabelle1. Ich will nur Einträge vom Typ oben haben. STR_Name kann sowohl oben als auch unten sein. STR_Name kann auch zu mehreren FKLID gehören, aber nur 1 mal zu einer FKLID mit dem Typ oben. Diese FKLIDs sollen in die Tabelle 1 in L_Bereich geschrieben werden, und zwar für alle Einträge in der Tabelle 1.


Kann mir jemand helfen? Fehlen noch Angaben? Vielen vielen Dank!
Zuletzt geändert von Viprex am 26.01.2012, 13:06, insgesamt 1-mal geändert.
Nachts essen ist der Hit!
Kommt gleich neben tagsüber essen :)

Benutzeravatar
fassy
Vice Admiral
Turtleboard Veteran
Turtleboard Veteran
Beiträge: 5855
Registriert: 26.01.2004, 20:44
Wohnort: Hamburg

Re: MS SQL 2008 - Update Statement

Ungelesener Beitrag von fassy » 26.01.2012, 13:26

Erm...
STR_Name kann auch zu mehreren FKLID gehören, aber nur 1 mal zu einer FKLID mit dem Typ oben
Dann ist dein Model aber etwas unglücklich gewählt...

Kannst du mal mit den Beispiel Daten per Hand L_BEREICH füllen damit ich weiß was du eigentlich vorhast, so ganz werde ich aus deiner Beschreibung nicht schlau :)
Pick up the hammer... pick it up.

Benutzeravatar
Viprex
Vice Admiral
Turtleboard Veteran
Turtleboard Veteran
Beiträge: 4590
Registriert: 08.03.2004, 18:33
Wohnort: Hohenlockstedt
Kontaktdaten:

Re: MS SQL 2008 - Update Statement

Ungelesener Beitrag von Viprex » 26.01.2012, 13:37

Stimmt, das ist nur eine Beschränkung für dieses Beispiel :) Die Tabellen sind in der Tat viel größer und ich will nur eine temp. Migration machen. Die Annahme, das STR_Name nur 1 x als Typ oben zu einer FKLID gehört, ist in meinem Beispiel zur Zeit korrekt, für die Zukunft ist es aber direkt so ausgelegt, dass die Tabelle 2 auch vom Typ oben zu einem STR_Namen mehrere FKLIDs haben kann. Das ist schon korrekt so, nur momentan kann ich mich drauf verlassen, dass dies eben nicht der Fall ist. Ich weiß, dass es nicht so ist :)

Achso, falls Tabelle 2 einen Namen mit dem Typ oben und unten hat, dann sind dies unterschiedliche FKLIDs.

Ziel Tabelle 1

Code: Alles auswählen

ID    STR_AUTOR    L_BEREICH    STR_TEXT
1         A           5           XYZ
2         B           2           XYZ
3         C                       XYZ
4         A           5           XYZ
5         C                       XYZ
6         A           5           XYZ
7         B           2           XYZ
8         B           2           XYZ
9         B           2           XYZ
10        C                       XYZ
C hätte in diesem Beispiel keine L_Bereich, da er in Tabelle 2 keinen Eintrag mit dem Typ oben hat. Eigentlich ist mein Beispiel hier schon falsch, da alle STR_Autoren A, B, C mindestens einmal den Typ oben haben in Tabelle 2. Daher muss Eintrag 4 in Tabelle 2 ebenfalls den Typ oben haben. Dann würde in Tabelle 1 für Autor C im L_Bereich eine 1 stehen. Sorry für die Verwirrung. Hier also die korrekten Tabellen:


Tabelle1

Code: Alles auswählen

ID    STR_AUTOR    L_BEREICH    STR_TEXT
1         A                       XYZ
2         B                       XYZ
3         C                       XYZ
4         A                       XYZ
5         C                       XYZ
6         A                       XYZ
7         B                       XYZ
8         B                       XYZ
9         B                       XYZ
10        C                       XYZ
Tabelle 2

Code: Alles auswählen

ID    FKLID    STR_Name   STR_TYP
1        5         A       oben
2        2         B       unten
3        5         A       oben
4        1         C       oben
5        4         D       oben
6        33        E       oben
7        6         D       unten
8        7         D       unten
Ziel Tabelle 1

Code: Alles auswählen

ID    STR_AUTOR    L_BEREICH    STR_TEXT
1         A           5           XYZ
2         B           2           XYZ
3         C           1           XYZ
4         A           5           XYZ
5         C           1           XYZ
6         A           5           XYZ
7         B           2           XYZ
8         B           2           XYZ
9         B           2           XYZ
10        C           1           XYZ
Zuletzt geändert von Viprex am 26.01.2012, 13:41, insgesamt 4-mal geändert.
Nachts essen ist der Hit!
Kommt gleich neben tagsüber essen :)

Benutzeravatar
fassy
Vice Admiral
Turtleboard Veteran
Turtleboard Veteran
Beiträge: 5855
Registriert: 26.01.2004, 20:44
Wohnort: Hamburg

Re: MS SQL 2008 - Update Statement

Ungelesener Beitrag von fassy » 26.01.2012, 15:50

Code: Alles auswählen

UPDATE t1
   SET 
      t1.L_BEREICH = t2.FKLID
      
   FROM Tabelle1 t1
   JOIN Tabelle2 t2
   ON t1.STR_AUTOR = t2.STR_NAME
Sollte doch da langen, oder?
Pick up the hammer... pick it up.

Benutzeravatar
Viprex
Vice Admiral
Turtleboard Veteran
Turtleboard Veteran
Beiträge: 4590
Registriert: 08.03.2004, 18:33
Wohnort: Hohenlockstedt
Kontaktdaten:

Re: MS SQL 2008 - Update Statement

Ungelesener Beitrag von Viprex » 26.01.2012, 17:29

Jepp, langt. So haben wir es nun auch gelöst. Klasse, das erspart mir viel Arbeit.

Ist also doch viel einfacher, als ich mir das vorgestellt habe. Ich war da auf dem völlig falschen Weg. Lieben Dank!
Nachts essen ist der Hit!
Kommt gleich neben tagsüber essen :)

Antworten