Che Posted December 30, 2018 Report Posted December 30, 2018 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! Quote
Active Members Fi8sVrs Posted December 30, 2018 Active Members Report Posted December 30, 2018 (edited) Concluzia?, ai notepad++ te complici https://stackoverflow.com/questions/18860233/mysql-select-as-combine-two-columns-into-one Edited December 30, 2018 by OKQL Quote
u0m3 Posted December 30, 2018 Report Posted December 30, 2018 (edited) 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 UNION: exemplu. Edited December 30, 2018 by u0m3 Fixed links 1 Quote
Che Posted December 31, 2018 Author Report Posted December 31, 2018 13 hours ago, u0m3 said: Acestea fiind spuse, daca vrei sa creezi un tabel in care ai fiecare coloana din fiecare tabel, poti folosi UNION: exemplu. 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;" Quote
u0m3 Posted January 1, 2019 Report Posted January 1, 2019 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. 1 Quote