Update mit Select

  • Themenstarter Themenstarter ByeBye 31659
  • Beginndatum Beginndatum
B

ByeBye 31659

Hallo,

ich habe folgendes Problem. Ich möchte ein Update auf eine Tabelle ausführen, das aber eine Bedingung, die eine andere Tabelle einbezieht, hat. Ausserdem birgt das Select (die Bedingung) das Problem, dass ich nicht weiß wie ich an das richtige Recordset herankomme.

Aufbau der Tabellen:

Tabelle 1:
PK: A
Updatevalue: exists

Tabelle 2:
PK: B
FK: A
CheckValue: attribute

Beispiel:
Tabelle 1:
A, exists
1, 1
2, 0

Tabelle 2:
B, A, attribute
1, 1, null
2, 1, 1
3, 2, 1
4, 2, 2

Gewünschtes Ergebnis:
In der Tabelle 1 wird die Spalte exists beim Datensatz 1 auf 0 gesetzt und beim Datensatz 2 auf 1 gesetzt. Denn es soll in der Tabelle 1 das exists auf 0 gesetzt werden, sofern für den PK in der Tabelle 2 ein Wert auf "" oder null steht. Sofern für diesen PK nur Werte ungleich "" oder null existieren, soll exists in der Tabelle 1 auf 1 gesetzt werden.

Mein Versuch:

Update Tabelle 1 SET exists = 0 From Tabelle 1 INNER JOIN Tabelle 2 ON Tabelle1.PK = Tabelle2.FK Where attribute is null or attribute = ""

Update Tabelle 1 SET exists = 1 From Tabelle 1 INNER JOIN Tabelle 2 ON Tabelle1.PK = Tabelle2.FK Where attribute is not null and attribute <> ""

Leider funktioniert das bisher nicht, da besonders das zweite Update auch Werte zurückliefert, wenn nur ein Datensatz in tabelle 2 ungleich "" oder null ist...

Kann mir da jemand helfen?

Vielen Dank im voraus.
 
Hi,

um welches DBMS geht es? In MySQL müssten die Queries eigentlich fehlschlagen wegen falscher Syntax.

SQL:
Update Tabelle1, Tabelle2 
   SET Tabelle1.`exists` = 0 
   where Tabelle1.PK = Tabelle2.FK 
   and (attribute is null or attribute = "")

LG
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

danke für die Antwort. Es handelt sich hierbei um einen MS SQL-Server 2005.

Deine Antwort scheint mir für den Fall exist = 0 richtig zu sein, aber wie sieht es mit exist = 1 aus?

Wie bekomme ich heraus, ob in der 2. Tabelle nur Datensätze ungleich null oder "" für einen Datensatz aus Tabelle 1 sind?

Beispiel

Tabelle 1
A
B

Tabelle 2
1, A, "bla"
2, a, "blubb"
3, A, null
4, B, "hallo"
5, B, "test"

In Tabelle 1 soll nun exists für B auf 1 gesetzt werden und für A nicht, da für A in Tabelle 2 ja ein Datensatz den Wert null hat.

Ist das Problem soweit verständlich?
 
Hi,

da fällt mir gerade nur eine Lösung mit Subquery ein:

SQL:
UPDATE Tabelle1, Tabelle2
   SET Tabelle1.`exists` = 0 
   WHERE Tabelle1.PK = Tabelle2.FK
   AND Tabelle1.PK NOT IN
      (SELECT Tabelle2.FK FROM Tabelle2
         WHERE attribute IS NULL OR attribute = "")

LG
 
Zuletzt bearbeitet von einem Moderator:
Zurück