🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

[Gelöst]Felder per UPDATE füllen oder mit "UNION ALL" Zusammenfassen

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
Benutzeravatar
Chr_Alt
Beiträge: 22
Registriert: Di 25. Jan 2022, 11:14

[Gelöst]Felder per UPDATE füllen oder mit "UNION ALL" Zusammenfassen

Beitrag von Chr_Alt » Mi 15. Feb 2023, 15:25

Hallo,

ich habe folgende Herausforderung:

Beim letzten Umzug habe ich die Sortierung meiner physischen Tonträger geändert:
Vorher: „INTERPRET_GRUPPE“ > VÖ > Titel (des Albums)
Nachher: „Nachname“ > „Vorname“ > „VÖ“ > Titel

In meiner Musikdatenbank habe ich eine Tabelle „INTERPRETEN _ GRUPPEN“ mit 3 Feldern: „INTERPRET_GRUPPE“, URL des Künstlers und „GESCHICHTE“

Für die oben beschriebene Aufgabe habe ich mir folgende Lösung überlegt:

In der Tabelle „INTERPRETEN _ GRUPPEN“ zusätzliche Felder „Vorname“, „Nachname“ und „Künstler“

Die beiden Felder „Vorname“ und „Nachname“ habe ich per „UPDATE“ mit Inhalten gefüllt und auch eine Formel gefunden mit der ich das Feld „Künstler“ füllen kann.

Dabei bin ich auf das folgende Problem gestoßen: Das Feld „Künstler“ erhält das was ich für Einzelne Künstler haben möchte nämlich „Vorname Nachname“ (Beispiel: „Phil Collins).
So weit so gut. Bei Bandnamen bekomme ich aber diesen doppelt (Beispiel: Genesis Genesis)

Also habe ich 2 Lösungen ausprobiert:

Über eine „UNION“-Abfrage 2 Abfragen zu verbinden:
in der 1. Abfrage für einzelne Interpreten (z. B. „Phil Collins)
in der 2. auf das Feld „Nachname“ so das Ergebnis eben der Bandname ist (z. B. „Genesis“)

Dazu habe ich folgende Abfragen erstellt, leide alle ohne positives Ergebnis:

Code: Alles auswählen

Variante 1.1
SELECT `I`.`INTERPRET_GRUPPE` AS `INTERPRET_GRUPPE`, `I`.`Vorname` AS `Vorname`, `I`.`Nachname` AS `Nachname`, `I`.`Nachname` AS `Künstler` 
FROM
(
(SELECT `I`.`INTERPRET_GRUPPE`, `I`.`Vorname`, `I`.`Nachname`  AS Nachname , CONCAT( `I`.`.`Vorname`, ' ', `I`..`Nachname` ) AS `Künstler` 
FROM `INTERPRETEN _ GRUPPEN` AS `I` 
WHERE `Vorname` != `INTERPRETEN _ GRUPPEN`.`Nachname`)
 
 UNION ALL
 
(SELECT `I`.`INTERPRET_GRUPPE`, AS  `Vorname`, `I`.`Nachname` AS `Nachname`, `I`.`Nachname` AS `Künstler` 
FROM `INTERPRETEN _ GRUPPEN` AS `I` 
WHERE `Vorname` = `INTERPRETEN _ GRUPPEN`.`Nachname`)
)
GROUP BY  `I`
ORDER BY `Vorname`

Variante 1.2
SELECT `Vorname`, `Nachname`,`Künstler`
FROM

((SELECT `INTERPRET_GRUPPE`,`Vorname`, `Nachname`, CONCAT( `Vorname`, ' ', `Nachname` ) AS `Künstler` FROM `Musik`.`INTERPRETEN _ GRUPPEN` AS `INTERPRETEN _ GRUPPEN` where `Vorname` != `Nachname`
 GROUP BY `Künstler`)

UNION ALL

(SELECT `INTERPRET_GRUPPE`,`Vorname`, `Nachname`, `Nachname` AS `Künstler` FROM `Musik`.`INTERPRETEN _ GRUPPEN` AS `INTERPRETEN _ GRUPPEN` WHERE `Vorname` != `Nachname` GROUP BY `Künstler`))
GROUP BY `Künstler`
ORDER BY `Vorname`, `Nachname`
Variante 1.3
SELECT `I-G`.`INTERPRET_GRUPPE`, `I-G`.`Vorname`, `I-G`.`Nachname`, `I-G`.`K`
 FROM
 (SELECT `I-G`.`INTERPRET_GRUPPE`, `I-G`.`Vorname`, `I-G`.`Nachname`, CONCAT(`I-G`..`Vorname`, ' ', `I-G`.`Nachname` ) AS `I-G`.`K` 
 FROM `INTERPRETEN _ GRUPPEN` AS `I-G` 
 WHERE `I-G`.`Vorname` != `I-G`.`Nachname` GROUP BY `I-G`.`K` ORDER BY `K`)
 
 UNION ALL
 
 (SELECT `I-G`.`INTERPRET_GRUPPE`, `I-G`.`Vorname`, `I-G`.`Nachname`,`I-G`.`Nachname` AS `I-G`.`K` 
 FROM `INTERPRETEN _ GRUPPEN` AS `I-G` 
 WHERE `I-G`.`Vorname` != `I-G`.`Nachname` GROUP BY `I-G`.`K` ORDER BY `K`)
 

Als weiteren Weg habe ich da Feld „Vorname“ für alle Bands/Gruppen gelöscht ( in der DB über den Browser, nicht über Libreoffice-Base funktioniert hat) und die Abfrage die für Einzelkünstler auf alle Datensätze ausgeweitet mit folgender Formel, welche die Felder „Vorname“ und „Nachname “ zusammenfasst (z. B. „Phil Collins):

Code: Alles auswählen

Variante 2.1
CONCAT( `INTERPRETEN _ GRUPPEN`.`Vorname`, ' ', `INTERPRETEN _ GRUPPEN`.`Nachname` ) AS `Künstler` FROM `INTERPRETEN _ GRUPPEN`
Das Ergebnis dieser Abfrage ist das nur die Datensätze mit beiden gefüllten Feldern ausgegeben wird, nicht aber die der Bands bei denen das Feld „Vorname“ leer ist.

Der ganze Krempel läuft auf einem Intel-NUC mit Debian 10 in 2 PROXMOX-VM ebenfalls mit Debian 10, eine mit dem WEB-Server unter Apache2 und eine für MariaDB.

Gruß und vielen Dank im Voraus

Christian
Zuletzt geändert von Chr_Alt am Sa 18. Feb 2023, 23:54, insgesamt 1-mal geändert.

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Felder per UPDATE füllen oder mit "UNION ALL" Zusammenfassen

Beitrag von RobertG » Mi 15. Feb 2023, 19:32

Hallo Christian,

einfacher wäre es, wenn Du das irgendwie in eine interne Datenbank mit ein paar Daten packen und hochladen könntest. So ist mir die Analyse Deine UNION ALL-Codes (der wegen ALL zur Verdoppelung von Daten führen kann) zu kompliziert. Du schreibst auch nicht, was da am Ergebnis nicht stimmt.

Bei dem 2. Code: Wenn Du die Ohne `Vorname` auch anzeigen willst, dann geht das über IFNULL. Da Du mit CONCAT arbeiten musst (MariaDB)

Code: Alles auswählen

SELECT 
CONCAT(
IFNULL(CONCAT( `INTERPRETEN _ GRUPPEN`.`Vorname`, ' '),''), 
`INTERPRETEN _ GRUPPEN`.`Nachname` ) AS `Künstler` 
FROM `INTERPRETEN _ GRUPPEN`
Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

Benutzeravatar
Chr_Alt
Beiträge: 22
Registriert: Di 25. Jan 2022, 11:14

Re: Felder per UPDATE füllen oder mit "UNION ALL" Zusammenfassen

Beitrag von Chr_Alt » Do 16. Feb 2023, 19:58

Hallo Robert,

ich habe nun mittels CONCAT(IFNULL(CONCAT ....) das Feld "Künstler" sowohl in der Tabelle der Interpreten als auch in der Tabelle der Alben gefüllt, so das ih alles Andere mit dem Feld erledigen kann.

Also vielen Dank dafür.

Wenn Du das gebrauchen kannst, kann ich natürlich noch die Fehlermeldungen der 3 Varianten mit UNION liefern. Ich selber werde sie allerdings vermutlich nicht mehr benötigen.

Gruß

Christian

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Felder per UPDATE füllen oder mit "UNION ALL" Zusammenfassen

Beitrag von RobertG » Fr 17. Feb 2023, 08:07

Hallo Christian,

wichtig ist doch, dass das Problem gelöst ist. Wenn ein Problem mit UNION auftaucht einfach neu schreiben.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten