🙏 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. 🤗

Tabelle mit 8600 Datensätzen aufteilen

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
WonneWasti
! Supporter - Spende !
Beiträge: 73
Registriert: So 1. Jan 2017, 11:34

Tabelle mit 8600 Datensätzen aufteilen

Beitrag von WonneWasti » So 28. Aug 2022, 17:59

Hallo, ich habe hier eine aus einer .mdb-Datei extrahierte Calc-Tabelle mit den Platten meines Vaters und würde gern eine Datenbank mit Formularen und Berichten draus bauen. Es ist alles in einer Tabelle vereinigt: Komp_Vorn, Komp_Nachn, Geburtsort, Lebenslauf, Drirgent, etc. die kleinste Einheit ist das Stück auf dem Datenträger. Manuell müsste ich also nach den Komponisten sortieren und dann eine KompID- Spalte für die Komponisten einfügen und für jeden neuen Komponisten eine neue ID vergeben, die Tabellen dann in "Komponisten" und "Stücke" aufteilen und bei den Komponisten die Dubletten löschen.
Dann hätte ich schon einmal zwei Tabellen zum Verbinden.
Und diese Spiel noch mit den Datenträgertypen und anderen Eigenschaften wiederholen.
SQL kann diese Aufgabe sicher "unmanuell", oder kann vielleicht Calc die Nummern vergeben? Den Rest würde ich dann per Pivottabelle zu lösen versuchen.

Mein Leben hängt NICHT von der Lösung der Aufgabe ab, es ist eher sportlicher Ehrgeiz.

beste Grüße und Dank im Voraus

WonneWasti

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

Re: Tabelle mit 8600 Datensätzen aufteilen

Beitrag von RobertG » So 28. Aug 2022, 18:49

Hallo WonneWasti,

hier nur, wie ich so etwas handhabe:
1. Alle Daten in eine Tabelle (z.B. "Import") einlesen.
2. Abfrage

Code: Alles auswählen

SELECT DISTINCT "Komponisten" FROM "Import"
laufen lassen. Das schluckt alle Duplikate.
3. Abfrage nehmen und als neue Tabelle "Komponisten" einfügen. Vielleicht vorher bereits diese Tabelle mit einer "ID" als AutoWert erstellen.
4. "Import" eine Spalte "KomponistenID" hinzufügen - Integer wie die "ID" in "Komponisten"
5. Über Extras → SQL

Code: Alles auswählen

UPDATE "Import" AS "a" 
SET "a"."KomponistenID" = (SELECT "ID" FROM "Komponisten" WHERE "Komponisten" = "a"."Komponisten")
Danach hast Du in der Tabelle "Import" den Verweis auf die Komponisten drin.

So kannst Du Stück für Stück die Ausgangstabelle "normalisieren", d.h. zu häufige Duplikate entfernen und durch ausgelagerte Tabellen ersetzen.

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

WonneWasti
! Supporter - Spende !
Beiträge: 73
Registriert: So 1. Jan 2017, 11:34

Re: Tabelle mit 8600 Datensätzen aufteilen

Beitrag von WonneWasti » Mi 31. Aug 2022, 20:43

Hallo, Robert,
das wird rein Arbeitstechnisch ein bisserl fuxen, bis ich alle Dateinamen , Feldnamen, etc. richitg eingetippt sein werden. Ich will auch "Komp_Vorn"||"Komp_Nachn" als Vergleichschlüssel verwenden. Der Extras-SQL- Dialog ist ein bisserl "hölzern".

Das wird einfach nur eine schwierige Fieselarbeit werden.

habe vielen Dank aus Wonneberg

Wasti

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

Re: Tabelle mit 8600 Datensätzen aufteilen

Beitrag von RobertG » Do 1. Sep 2022, 07:57

Hallo Wasti,

ich nehme bei so etwas für den Code einen ganz normalen Editor des Systems. Heißt bei mir hier Kate und kann auch Hervorhebungen für verschiedene Datenbanken, so dass Fehler besser sichtbar sind.
Anschließend kopiere ich das Ergebnis in den Base-Editor und schicke es ab.

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

WonneWasti
! Supporter - Spende !
Beiträge: 73
Registriert: So 1. Jan 2017, 11:34

Re: Tabelle mit 8600 Datensätzen aufteilen

Beitrag von WonneWasti » Do 1. Sep 2022, 11:11

Grimmig ! Ich hab´s gekonnt ! Es gibt jetzt eine Tabelle für jedes Stück auf den Platten mit den Verweisen auf Komponisten, etc. sowie für die ausgelagerten Daten je eine Tabelle mit passender ID.
Was ich natürlich nicht bedacht hatte war der Umstand dass die Originaltabelle (Import) lückig ausgefüllt ist, z.B. gibt es nicht zu jedem Stück einen Interpreteneintrag, Die Folge ist natürlich dass Abfragen mit "=" Ergebnisse ohne passende Indizes ignorieren. Da werde ich mein Glück mit Right- und Left- joins versuchen. Oder geht das anders ?

Gruß und Dank aus Wonneberg
Wasti

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

Re: Tabelle mit 8600 Datensätzen aufteilen

Beitrag von RobertG » Do 1. Sep 2022, 11:43

Hallo Wasti,

wenn Du alle Datensätze aus der Ausgangstabelle haben willst:

Code: Alles auswählen

SELECT "Ausgangstabelle".*, "Komponisten".* 
FROM "Ausgangstabelle" LEFT JOIN "Komponisten" 
ON "Ausgangstabelle"."KomponistenID" = "Komponisten"."ID" 
Ich arbeite grundsätzlich nur mit dem LEFT JOIN. Links steht dann die Tabelle, die auf jeden Fall alle Datensätze anzeigen soll und rechts die Tabelle, die hin und wieder einen Datensatz dazu gibt.

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