# Datenmerge große Tabelle



## Joew0815 (7. Feb 2014)

Moin ...
ich tue mich noch ziemlich schwer mit Joins ... ich nehm an das es sich heir um einen Join handel :{

Ich habe eine Tabelle mit ziemlich vielen Spalten (ca. 250) in die ich per Excel Daten importiere.
Sagen wir nun beispielhaft, ein Datensatz besteht eigentlich aus zwei Teilen, die aber aus unterschiedlichen Files in eben dieses Taballe geladen werde, jedoch beim import nicht gemerged werden.

Dies soll nun bei der Abfrage passieren:

Die Import-Tabelle : Eig1, Eig2, Eig3, Eig4, Eig5, Eig6

Datensatz aus ExcelFile1 hat: Eig1, Eig2, Eig3
Datensatz aus ExcelFile2 hat: Eig4, Eig5, Eig6

Diese sollen nun per select zusammengefügt werden ...
Da es aber so viele Spalten in der Tabelle gibt, wollte ich frage ob es umgehbar ist die Eigenschaften namelich referenzieren zu müssen. 
Falls nicht. Wie mache ich dann den select, dass ich nach der Abfrage ein Ergebnis mit den Eig. 1-6 habe!??

konnte ich mich verständlich ausdrücken?
danke und schöen gruß


----------



## frapo (7. Feb 2014)

Also ein Join wird nicht auf eine Tabelle angewendet, sondern auf mindestens zwei. 

Ist es richtig, das Du nur eine Tabelle hast, mit ca. 250 Spalten? Das spricht für ein wenig gutes Design, um es mal neutral auszudrücken.

Mit welcher Datenbank arbeitest Du bzw. aus welcher Datenbank sollen die Daten exportiert werden?


----------



## turtle (8. Feb 2014)

> Ich habe eine Tabelle mit ziemlich vielen Spalten (ca. 250)



Echt?

Ich zwinge zwar niemanden dazu eine DB in die dritte Normalform zu "pressen" und kenne auch dein Datenmodell nicht.

Aber die schiere Anzahl lässt mich vermuten, das da viele Abhängigkeiten vorhanden sind und besser in separaten Tabellen aufgehoben wären.

Dann würde wohl auch ein Join Sinn machen. Aber leider sind deine Infos hier etwas spärlich.



> Wie mache ich dann den select, dass ich nach der Abfrage ein Ergebnis mit den Eig. 1-6 habe!??


Und deswegen kann man hier nur "global" antworten


```
select Eig1, Eig2, Eig3, Eig4, Eig5, Eig6 from tabelle;
```


----------



## torsan (8. Feb 2014)

Ich kann mich nur anschließen, 250 Spalten sind schon ne Menge.



> Da es aber so viele Spalten in der Tabelle gibt, wollte ich frage ob es umgehbar ist die Eigenschaften namelich referenzieren zu müssen.




```
SELECT * FROM tabelle;
```

Falls du alle 250 Spalten ausgeben willst.


----------



## ChristianK (8. Feb 2014)

Select * ist böse, sehr sogar. Damit erzeugst du nur Inkonsistenten. Normalisiere die Tabelle!


----------



## JavaMeister (8. Feb 2014)

Bitte zeige mir, wie man mit einem Select INKONSITENZEN in der DB erzeugt.


----------



## torsan (8. Feb 2014)

Habe ich mich auch gerade gefragt. Mit Select kann man lediglich Daten auslesen...


----------



## KSG9|sebastian (9. Feb 2014)

Select * mag aus diversen Gründen nicht optimal sein , aber sicher nicht wegen Inkonsistentz  250 Spalten? Ehrlich ? Das würd ich gern sehen. Hat da jemand Zeilen als Spalten abgebildet ?


----------



## frapo (9. Feb 2014)

ChristianK hat gesagt.:


> Select * ist böse, sehr sogar. Damit erzeugst du nur Inkonsistenten. Normalisiere die Tabelle!



Bitte um Aufklärung.. würde mich doch sehr wundern, wenn ein reines Lesen von Daten Schäden anrichten könnte.


```
SELECT *
```
 geht vielleicht auf die Performance der Datenbank oder des Netzwerks aber mehr auch nicht.


----------



## turtle (10. Feb 2014)

SELECT * ist deswegen "böse", weil du halt ALLE Spalten liest, aber nicht weißt in welcher Reihenfolge sie kommen. 

Das KANN zu Problemen führen, wenn der Code beispielsweise davon ausgeht, das Spalte 4 immer der Name ist, nun aber in Spalte 4 der Preis steht. In welcher Reihenfolge die Attribute zurückgegeben werden ist nicht definiert. Über den Namen die Spalte zu selektieren, kann je nach DB ebenfalls ein Problem sein, da langsamer.

Und natürlich ist es problematisch, wenn jemand mehrere Spalten zur Tabelle hinzufügt, du die per select ausliest, mit den Daten aber gar nichts anfängst, weil du damit nicht gerechnet hast, das plötzlich mehr Spalten als erwartet kommen.

Daher ist es besser zu schreiben

```
select name, preis from...
```


----------



## Joew0815 (11. Feb 2014)

Moin moin 
nu sach ich auch mal wieder was dazu: back to di topic!

Ouote: Turtle


> SELECT Eig1, Eig2, Eig3, Eig4, Eig5, Eig6 FROM tabelle;



Wie eingangs geschrieben habe, existieren hier exemplarisch ZWEI Datensätze von dem einer die Eigenschaften 1 bis 3 enthält und ein zweiter die Eigenschaften 4-6. 
Mit deinem SELECT ist eine Kombination der Ergebnismengen von Datensatz 1 und 2 auf eine Ergebniszeile wohl nicht möglich!


----------



## turtle (11. Feb 2014)

> Wie eingangs geschrieben habe, existieren hier exemplarisch ZWEI Datensätze von dem einer die Eigenschaften 1 bis 3 enthält und ein zweiter die Eigenschaften 4-6.


woher weisst du denn, das eine Zeile mit Eig1, Eig2, Eig3 GENAU zu einer Zeile mit Eig4, Eig5, Eig6 gehört.

Beim Select bekommst du doch zurück (Beispiel).
Eig1, Eig2, Eig3 Eig4, Eig5, Eig6 

4, 'Turtle', 'Montag', null, null, null
null,null,null, 27, 'Maja', 'Dienstag'
4, 'Turtle', 'Montag', 72, 'Willi', 'Sonntag'
null, null, 'null, 72, 'Willi', 'Sonntag'

Woher weisst du das Zeile1 zu Zeile 2 gehört und nicht zum Beispiel 1+4?


----------



## Joew0815 (12. Feb 2014)

das weiß ich z.B. über eine ID, bzw zwei ID Felder


 4, 'Turtle', 'Montag', null, null, null, null, 'part1-1234'     
 null,null,null, 27, 'Maja', 'Dienstag', 'part2-1234', null     
 4, 'Turtle', 'Montag', 72, 'Willi', 'Sonntag', null, 'part2-5678'
 null, null, 'null, 72, 'Willi', 'Sonntag', 'part2-5678', null


----------



## Joew0815 (12. Feb 2014)

und weiterhin die Frage, wie kann nun 1. mit 2. und 3. mit 4. jweils in eine Ergebnisreihe gebracht werden!


----------



## turtle (12. Feb 2014)

```
select a.Eig1, a.Eig2, a.Eig3,b.Eig4, b.Eig5, b.Eig6. from tabelle a, tabelle b where b.id=a.id;
```


----------



## Joew0815 (12. Feb 2014)

ok und tabelle a, tabelle b schreib ich so, obwohl es die gleiche tabelle ist ja?


----------



## fastjack (12. Feb 2014)

Eigentlich macht man es so, dass man aus der Excel-Datei ein halbwegs logisches Datenmodell erzeugt. Wenn es in die Datenbank soll, musst Du es normalisieren, also kurz gesagt Redundanzen sparen. Dann schreibst Du ein Importjob, der die Excel einliest und in die DB importiert.


----------

