Jump to content
Che

Ajutor: Combinare tabele in unul singur ?

Recommended Posts

Din mai multe fisiere json, dupa ce le-am convertit in format .csv, le-am bagat cu Python intr-o baza de date de tip SQLite.

In total am 500 de tabele care sunt in felul urmator:

Toate au in comun ~30 de coloane (fullName, firstName, lastName, age, sex, nationalitate, etnie, regiune, tara etc.) <--- toate astea sunt in comun in toate tabelele si se gasesc in fiecare dintre cele 500 de tabele.

Acuma, fiecare tabel mai are in plus intre 1 si 15 coloane unice, specifice doar lui, care nu se mai gasesc si in alte tabele.

O persoana (nu e vorba de o persoana reala, nu va ganditi la date personale & stuff) se poate gasi intr-un tabel sau mai multe sau in toate dar nu e neaparat sa se gaseasca in toate tabelele, putand fi si tabele care nu contin acea persoana.

Folosind SQLite m-am gandit sa fac asta cu LEFT OUTER JOIN problema e ca daca le bag pe toate intr-un singur query imi da operational error ca numarul maxim e 1000. Asa ca am decis sa iau tabelele cate 7  desi merge ca si comanda e tot prea mare si  da Memory Error.

Asa ca m-am gandit sa le iau cate doua:

Create table Mytable_randomstr1 if not exists as select * from tabel_1 left outer join tabel 2;

dupa care sa inversez (practic fac permutare intre cele doua) si reulta comanda:

Create table Mytable_randomstr2 if not exists as select * from tabel_2 left outer join tabel 1;

 

In final imi rezulta alte doua tabele si daca e sa o iei asa, nu am rezolvat nimic ca din cele 500 de tabele imi rezulta altele 500.

 

Cum as putea sa le combin pe toate intr-unul singur, fara a pierde datele din coloanele specifice fiecarui tabel (tinand cont ca tabelele nu au numar egal de coloane) ?

Daca e nevoie trec totul pe MySQL, numai sa iasa, problema e ca baza de date SQLite o tine pe un hdd portabil de 2tb in timp ce pe PC nu mi-ar incapea baza de date MySQL.

 

Multumesc mult de tot!

 

Link to post
Share on other sites

De fapt, ce vrei tu sa faci? Ca ce descrii acolo, lucreaza tocmai impotriva RDBMS/SQL. Ideea e sa descopui datele in mai multe tabele, astfel incat datele tale sa se repete cat mai putin. Apoi, folosind SQL, construiesti un tabel care contine informatiile ce te intereseaza, pe baza informatiilor agregate din tabelele tale. Astfel, daca o tara isi schimba numele, nu trebuie sa modifici tara fiecarui individ in parte: modifici numele tarii in tabelul cu tari, iar ID-ul aferent ramane identic.

 

Acestea fiind spuse, daca vrei sa creezi un tabel in care ai fiecare coloana din fiecare tabel, poti folosi UNIONexemplu.

Edited by u0m3
Fixed links
  • Upvote 1
Link to post
Share on other sites
13 hours ago, u0m3 said:

Acestea fiind spuse, daca vrei sa creezi un tabel in care ai fiecare coloana din fiecare tabel, poti folosi UNIONexemplu.

Nu pot face ceea ce zici tu cu extrasul fiindca nu exista primary key si pot fi persoane care sa aiba atat acelasi nume, cat si acelasi prenume, precum si chiar si aceeasi varsta, ei putand sa difere ca inaltime sau tara de provenienta. Nu poti sti care si cate coloane pot avea aceleasi valori si deci diferenta sa se faca prin coloanele ce au valori diferite.

Stiu, am incercat cu UNION numai ca nu merge, trebuie sa aiba aceleasi coloane si acelasi numar de coloane:

"Each SELECT statement within UNION must have the same number of columns;"

Link to post
Share on other sites

Pai eu in exemplul pe care ti l-am dat am folosit NULL AS ColumnName in query pentru a substitui coloanele lipsa, aducand asftel toate tabelele la aceleasi numar de coloane. Sau mai simplu zis, am introdus coloane fictive cu valoarea NULL.

Daca dai forma tabelelor (SQL-ul cu create) iti scriu eu un union select. Dar tot sunt de parere ca ai o mare problema de design. Poate daca ne explici ce vrei sa faci, gasim o solutie mai eleganta.

  • Thanks 1
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...