für Spezialisten: Update in SQL // "join"

02/04/2010 - 17:53 von Nicole Wagner | Report spam
Hallo User,


gegeben ist eine Firebird Datenbank.
Es sollen ein paar Werte gelöscht werden und zwar aus der Tabelle
Zeilen.

Es sollen nicht irgendwelche Werte gelöscht werden, sondern nur jene,
deren Fremdschlüssel in der Fremdtabelle bestimmte Eigenschaften hat.

Gesagt, getan, sieht ja ganz richtig aus:

update tbzeilen zeile
set TrFlag=NULL
where
zeile.fk_kontakt = (SELECT COMM
FROM tbkontakte
WHERE tbkontakte.id_kontakt = zeile.fk_kontakt
and tbkontakte.Comm='O')

ist es aber nicht!
Denn der zeile.fk_kontakt steht nicht EIN Treffer gegenüber, sondern
mehrere.

Firebird will es nicht, ich will es schon:
Es sollen ALLE Zuordnungen zu
tbkontakte.Comm='O'
aNULLiert werden.

Wie kann ich das nur umsetzen?

Danke fuer Tipps!


Nicole
 

Lesen sie die antworten

#1 lothar.armbruester
02/04/2010 - 18:00 | Warnen spam
"Nicole Wagner" writes:

Hallo User,


gegeben ist eine Firebird Datenbank.
Es sollen ein paar Werte gelöscht werden und zwar aus der Tabelle
Zeilen.

Es sollen nicht irgendwelche Werte gelöscht werden, sondern nur jene,
deren Fremdschlüssel in der Fremdtabelle bestimmte Eigenschaften hat.

Gesagt, getan, sieht ja ganz richtig aus:

update tbzeilen zeile
set TrFlag=NULL
where
zeile.fk_kontakt = (SELECT COMM
FROM tbkontakte
WHERE tbkontakte.id_kontakt = zeile.fk_kontakt
and tbkontakte.Comm='O')

ist es aber nicht!
Denn der zeile.fk_kontakt steht nicht EIN Treffer gegenüber, sondern
mehrere.

Firebird will es nicht, ich will es schon:
Es sollen ALLE Zuordnungen zu
tbkontakte.Comm='O'
aNULLiert werden.

Wie kann ich das nur umsetzen?

Danke fuer Tipps!


Nicole



Hallo Nicole,
in erster Nàherung hàtte ich folgendes geschrieben:

update tbzeilen zeile set
TrFlag=NULL
where
zeile.fk_kontakt in (SELECT id_kontakt
FROM tbkontakte
WHERE Comm='O')

HTH,
Lothar

Lothar Armbrüster |
Hauptstr. 26 |
65346 Eltville |

Ähnliche fragen