Datenbank-Feld: Update mit "Join" bei einer m:n Verknüpfung

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.

Datenbank-Feld: Update mit "Join" bei einer m:n Verknüpfung

Beitragvon Aliobaba » 13. Dez 2018, 10:48 Datenbank-Feld: Update mit "Join" bei einer m:n Verknüpfung

Hallo,

Ich habe eine Datenbank (SQLite), die (unter anderem) die Tabelle "tText" und die Tabelle "tSchlagworte" enthält. Zwischen beiden Tabellen besteht eine m:n Verknüpfung, um beliebig vielen Texten beliebig vielen Schagworten zuordnen zu können. Diese m:n Tabelle heißt "tC".

Um nun alle Texteinträge in "tText" zu finden, die einem bestimmten Schlagwort zugeordnet sind, funktioniert folgender Befehl problemlos:
SELECT * FROM tText JOIN tC ON tText.rID=tC.rFKText Where tC.rFKSchlagw = 76

Um nun Veränderungen in der Tabelle "tText" in der Spalte Y3 durchführen zu können, suchte ich mir bisher immer in einer Query die entsprechenden tText-Einträge mit obigem Befehl heraus und ging diese Einträge dann einzeln durch, um den "Y3-Eintrag" mit einem Update-Befehl für jeden einzelnen Eintrag in der Query zu verändern.

Funktioniert gut, ist auch ausreichend schnell. Aber ich denke, "elegant" ist das nicht, eher ein wenig umständlich. Irgendwie habe ich das Gefühl, dies sollte "schöner" gehen.
Deshalb meine Frage: Gibt es eine Möglichkeit, mit einem einzige SQL-Befehl sofort die Y3-Spalte bei den gewünschten Texteinträgen zu ändern?

Versucht habe ich schon viel, unter anderem auch diesen Befehl:
UPDATE tText SET Y3 = "Neuer_Eintrag" where EXISTS ( SELECT * FROM tText JOIN tC ON tText.rID=tC.rFKText Where tC.rFKSchlagw = 76 )

Funktioniert aber leider nicht, da dabei ALLE Einträge in der "Y3"-Spalte der Tabelle "tText" den "Neuen_Eintrag" erhalten.

Jemand eine Idee, wie der Befehl richtig lautet?

Danke schonmal und einen schönen Tag!
Aliobaba

Code: Alles auswählen
  
CREATE TABLE `tText` (
   `rID`   INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
   `rTitel`   VARCHAR ( 90 ) NOT NULL,
   `rText`   TEXT,
   `rHinweis`   TEXT,
   `rFKRubrik`   INTEGER DEFAULT '1',
   `rDatumerstellt`   CHAR,
   `rDatumgeaendert`   CHAR,
   `Y3`   TEXT,
   FOREIGN KEY(`rFKRubrik`) REFERENCES `tRubrik`(`rID`) ON DELETE NO ACTION
);
 
CREATE TABLE `tSchlagw` (
   `rID`   INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
   `rSchlagw`   VARCHAR ( 51 ) NOT NULL,
);
 
CREATE TABLE `tC` (
   `rID`   INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
   `rFKText`   INTEGER NOT NULL,
   `rFKSchlagw`   INTEGER NOT NULL,
   FOREIGN KEY(`rFKSchlagw`) REFERENCES `tSchlagw`(`rID`) ON DELETE CASCADE,
   FOREIGN KEY(`rFKText`) REFERENCES `tText`(`rID`) ON DELETE CASCADE
);
 
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )
Aliobaba
Lazarusforum e. V.
 
Beiträge: 395
Registriert: 1. Mai 2012, 08:11

Beitragvon Eb » 13. Dez 2018, 13:20 Re: Datenbank-Feld: Update mit "Join" bei einer m:n Verknüpf

ohne es getestet zu haben:
Code: Alles auswählen
UPDATE tText SET Y3 = "Neuer_Eintrag" 
WHERE rID IN
(
SELECT rFKText FROM tC WHERE rFKSchlagw = 76
)
Eb
Lazarusforum e. V.
 
Beiträge: 202
Registriert: 5. Feb 2008, 15:32
Wohnort: Stuttgart
OS, Lazarus, FPC: linux - Laz 1.4.2 | 
CPU-Target: 32Bit
Nach oben

Beitragvon Aliobaba » 13. Dez 2018, 13:41 Re: Datenbank-Feld: Update mit "Join" bei einer m:n Verknüpf

Super!!! Funktioniert!! :)
Und ich spiele stundenlang mit "Join"-Befehlen rum!!

Danke!!
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )
Aliobaba
Lazarusforum e. V.
 
Beiträge: 395
Registriert: 1. Mai 2012, 08:11

• Themenende •

Zurück zu Datenbanken



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

porpoises-institution
accuracy-worried