![]() |
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:
Jetzt möchte ich überall, wo die PID zu der Typ=1-Gruppe gehört auf 0 gesetzt wird.
Tabelle Exemplare
_|EID|PID 0|1 |0 1|2 |5 2|3 |0 3|4 |4 3|5 |1 Ich dachte da an sowas:
SQL-Code:
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?
UPDATE Exemplare SET PID = 0 WHERE PID IN (SELECT PID FROM Personen WHERE Typ = 1)
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 |
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:
|
Re: [SQL] Werte in Tab1 ändern, die mit Tab2 übereinstimmen
Zitat:
MfG xZise |
Re: [SQL] Werte in Tab1 ändern, die mit Tab2 übereinstimmen
Also ich habe mir es nochmal genau angeschaut und eigentlich müsste das funktionieren (
![]() 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:
Das macht natürlich nicht das was ich brauche, aber es verdeutlicht wie er beim WHERE zugreift.
UPDATE Exemplare SET PID = 0 WHERE PID IN (SELECT PID FROM Personen WHERE EID > 2)
MfG xZise |
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: |
Re: [SQL] Werte in Tab1 ändern, die mit Tab2 übereinstimmen
Zitat:
Versuch es doch mal so...
SQL-Code:
Eventuell auch so (MSSQL würde das so fordern)...
UPDATE exemplare e
SET PID = 0 WHERE EXISTS (SELECT * FROM personen WHERE typ = 1 AND pid = e.pid)
SQL-Code:
UPDATE exemplare
SET PID = 0 FROM exemplare e WHERE EXISTS (SELECT * FROM personen WHERE typ = 1 AND pid = e.pid) |
Re: [SQL] Werte in Tab1 ändern, die mit Tab2 übereinstimmen
Ist das nichts fuer JOINTs?
|
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.
|
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:
MfG xZise |
Re: [SQL] Werte in Tab1 ändern, die mit Tab2 übereinstimmen
Tja, dann belibt wohl nur das Ermitteln der IDs und dann folgendes...
SQL-Code:
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)
UPDATE exemplare
SET PID = 0 WHERE PID IN (1, 2, 3) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz