BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 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: 16
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
Beiträge: 2732
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: 16
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
Beiträge: 2732
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 nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten