Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi [SQL] Werte in Tab1 ändern, die mit Tab2 übereinstimmen (https://www.delphipraxis.net/139420-%5Bsql%5D-werte-tab1-aendern-die-mit-tab2-uebereinstimmen.html)

xZise 28. Aug 2009 14:31

Datenbank: SQLite • Version: 3 • Zugriff über: A simple Delphi wrapper for Sqlite 3

[SQL] Werte in Tab1 ändern, die mit Tab2 übereinstimmen
 
Moin,
ich weiß gräßlicher Titel, aber ich habe zwei Tabellen:
Code:
Tabelle Personen

_|Name           |Typ|PID
0|Max Mustermann |1  |2
1|Erika Mustermann|1  |5
2|Daniel Wolf    |2  |4
Code:
Tabelle Exemplare

_|EID|PID
0|1  |0
1|2  |5
2|3  |0
3|4  |4
3|5  |1
Jetzt möchte ich überall, wo die PID zu der Typ=1-Gruppe gehört auf 0 gesetzt wird.
Ich dachte da an sowas:
SQL-Code:
UPDATE Exemplare SET PID = 0 WHERE PID IN (SELECT PID FROM Personen WHERE Typ = 1)
Aber er meckert rum, dass die Spalte Typ nicht existiert. Ich nehme mal an, er versucht in Exemplare die Spalte Typ zu finden... Deshalb frage ich euch, wie müsste es stattdessen heißen?

Achso Personen.Typ geht nicht! Und als Ergebnis müsste überall in der Exemplare-Tabelle als PID eine 0 stehen wo vorher eine 2 oder 5 stand. Also überall, außer bei den Exemplaren mit den ID 4 und 5.

MfG
xZise

jfheins 28. Aug 2009 14:49

Re: [SQL] Werte in Tab1 ändern, die mit Tab2 übereinstimmen
 
Ich vermute, er versucht (vergeblich) eine Spalte "PersonenID" in der Tabelle Exemplare zu finden :stupid:

xZise 28. Aug 2009 14:52

Re: [SQL] Werte in Tab1 ändern, die mit Tab2 übereinstimmen
 
Zitat:

Zitat von jfheins
Ich vermute, er versucht (vergeblich) eine Spalte "PersonenID" in der Tabelle Exemplare zu finden :stupid:

versuchte ;) Ich habe das hier halt gekürzt ^^

MfG
xZise

xZise 28. Aug 2009 21:36

Re: [SQL] Werte in Tab1 ändern, die mit Tab2 übereinstimmen
 
Also ich habe mir es nochmal genau angeschaut und eigentlich müsste das funktionieren ( http://de.wikibooks.org/wiki/Einf%C3..._Unterabfragen ).
Aber ich habe testweise, einfach mal beim WHERE-Befehl ein Vergleich mit der "ersten" Tabelle gemacht was geht. Wie kann ich nun dennoch den Befehl ausführen?

Das hier geht (aber das brauche ich nicht):
SQL-Code:
UPDATE Exemplare SET PID = 0 WHERE PID IN (SELECT PID FROM Personen WHERE EID > 2)
Das macht natürlich nicht das was ich brauche, aber es verdeutlicht wie er beim WHERE zugreift.

MfG
xZise

haentschman 28. Aug 2009 21:46

Re: [SQL] Werte in Tab1 ändern, die mit Tab2 übereinstimmen
 
Hallo,

eigentlich sollte das erstere funktionieren.

Merkwürdig ist eher die Tatsache, daß beim WHERE mit EID > 2 kein Fehler kommt, da die Spalte nicht in Personen existiert :gruebel:

wo da das Bit quer liegt vermag ich auch nicht zu sagen.

Bug in SQLite oder im Wrapper würde ich mal sagen. :roll:

omata 28. Aug 2009 23:01

Re: [SQL] Werte in Tab1 ändern, die mit Tab2 übereinstimmen
 
Zitat:

Zitat von haentschman
Merkwürdig ist eher die Tatsache, daß beim WHERE mit EID > 2 kein Fehler kommt, da die Spalte nicht in Personen existiert :gruebel:

Das ist nicht merkwürdig, sondern ganz normal und funktioniert in jeder Datenbank.

Versuch es doch mal so...
SQL-Code:
UPDATE exemplare e
SET PID = 0 
WHERE EXISTS (SELECT *
              FROM personen
              WHERE typ = 1
                AND pid = e.pid)
Eventuell auch so (MSSQL würde das so fordern)...
SQL-Code:
UPDATE exemplare
SET PID = 0 
FROM exemplare e
WHERE EXISTS (SELECT *
              FROM personen
              WHERE typ = 1
                AND pid = e.pid)

Mackhack 28. Aug 2009 23:06

Re: [SQL] Werte in Tab1 ändern, die mit Tab2 übereinstimmen
 
Ist das nichts fuer JOINTs?

omata 28. Aug 2009 23:09

Re: [SQL] Werte in Tab1 ändern, die mit Tab2 übereinstimmen
 
Naja, wird reden hier über ein Update-Statement, wenn man dort ohne JOINs auskommt, sollte man sich glücklich schätzen.

xZise 28. Aug 2009 23:20

Re: [SQL] Werte in Tab1 ändern, die mit Tab2 übereinstimmen
 
Hmmm also ich habe das jetzt mit obigen Code im SQLite Database Browser probiert und der ist in C oder C++ programmiert und da funktioniert das ebenfalls nicht.
Ich dachte nämlich gerade daran, das ich da ein paar stellen auf UTF8 geändert hatte. Aber daran scheint es dann ja nicht zu liegen.


Ach die Redbox. Wunderbar :P

Zitat:

Zitat von omata
Versuch es doch mal so...
SQL-Code:
UPDATE exemplare e
SET PID = 0 
WHERE EXISTS (SELECT *
              FROM personen
              WHERE typ = 1
                AND pid = e.pid)

Negativ: near "e": syntax error

Zitat:

Zitat von omata
Eventuell auch so (MSSQL würde das so fordern)...
SQL-Code:
UPDATE exemplare
SET PID = 0 
FROM exemplare e
WHERE EXISTS (SELECT *
              FROM personen
              WHERE typ = 1
                AND pid = e.pid)

Negativ: near "FROM": syntax error

MfG
xZise

omata 28. Aug 2009 23:23

Re: [SQL] Werte in Tab1 ändern, die mit Tab2 übereinstimmen
 
Tja, dann belibt wohl nur das Ermitteln der IDs und dann folgendes...
SQL-Code:
UPDATE exemplare
SET PID = 0
WHERE PID IN (1, 2, 3)
Eine andere Variante wäre: Benutze einfach eine richtige Datenbank (sorry, aber wenn das System nicht mal ein einfaches UPDATE realisiert bekommt, dann gute Nacht)


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:27 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz