SELECT aus zwei Tabellen
Mario
- datenbank
Hallo,
ich habe zwei Tabellen (mySQL) mit unteschiedlichen Daten, die Struktur ist aber identisch. Ich würde gern ein SELECT auf beide Tabellen machen um alle Rows beider Tabellen zu bekommen. Es handelt sich dabei um zwei Tabellen welche Logdaten enthalten. Ich würde gern ein Gesamtlog ausgeben nach Datum sortiert. Wenn ich zwei Selects nacheinander machen würde, hätte ich ja die Sortierung nach Datum nicht mehr. Mit einem JOIN hab ich es nicht hinbekommen...noch jemand eine Idee?
Danke, Mario
Hi,
es koennte da den UNION-Operator geben:
SELECT
*
FROM
table_1
UNION SELECT
*
FROM
table_2
Gruss,
Ludger
Damit hab ichs auch schon probiert gehabt, das bringt mir leider einen Fehler:
The used SELECT statements have a different number of columns
:-/
cya, Mario
Hi,
der UNION-Operator erwartet eine identische Datenfeldanzahl und eine identische Namensgebung von Datenfeldern unionierter Tabllen. Du darfst auch mit Dummyspalten und Datenfeldaliasen kommen.
Gruss,
Ludger
Achsooo...gut dann geb ich UNION noch eine Chance. ;-) Hatte das wohl falsch verstanden und dachte er meinte eine ungleiche Anzahl Rows. :-)
Bis dann, Mario
Hi,
ist das eine Beschränkung von mySQL, dass UNION da auch "identische
Namensgebung von Datenfeldern" erwartet? Aber der Datentyp der unterliegenden Spalten darf verschieden sein?
Ciao, Frank
Hi,
ist das eine Beschränkung von mySQL, dass UNION da auch "identische
Namensgebung von Datenfeldern" erwartet?
es scheint mir logisch erzwungen zu sein, dass die Namen identisch sein muessen, wenn nicht die Reihenfolge der DFs ausgewertet wird. Somit sollten alle Datenserver mit diesem "Problem" zu kaempfen haben.
Aber der Datentyp der unterliegenden Spalten darf verschieden sein?
Nein, sagt meine Erinnerung an den MS SQL Server 2000. Aber vielleicht schluckt es ja mySQL (denn die erhaltenen Daten sind ja immer auch als Zeichenkette darstellbar)?
Gruss,
Ludger
yo,
es scheint mir logisch erzwungen zu sein, dass die Namen identisch sein muessen, wenn nicht die Reihenfolge der DFs ausgewertet wird. Somit sollten alle Datenserver mit diesem "Problem" zu kaempfen haben.
es scheint mir nicht logisch zu sein, warum spaltennamen bei der verwendung von UNION gleich sein sollten. ich konnte auch in der mysql dukumentation nichts dazu finden, sprich meiner meinung nach können die spaltennamen sehr wohl unterschiedlich sein, solange der spaltentyp gleich ist. und die fehlermeldung kam wohl eher dadurch, dass eine unerschiedliche anzahl von spalten der select state´ments verwendet wurde.
Ilja
Hi,
es scheint mir nicht logisch zu sein, warum spaltennamen bei der verwendung von UNION gleich sein sollten.
doch, dass RDBMS muss ja die einzelnen Dimensionen der einen Matrix mit den einzelnen Dimensionen der anderen verknuepfen. Das geht ueber den Namen oder ueber die Reihenfolge, wobei letzteres zumindest unschoen ist.
ich konnte auch in der mysql dukumentation nichts dazu finden, sprich meiner meinung nach können die spaltennamen sehr wohl unterschiedlich sein, solange der spaltentyp gleich ist.
Probiers einfach mal aus.
und die fehlermeldung kam wohl eher dadurch, dass eine unerschiedliche anzahl von spalten der select state´ments verwendet wurde.
Probieren geht ueber Meditieren.
Gruss,
Ludger
Hi,
Probieren geht ueber Meditieren.
man kanns beim MS SQL Server 2000 tatsaechlich mit dem guten Sternchen schaffen, dann werden die Datenfeldnamen der zweiten Tabelle anscheinend ueberschrieben.
Ohne Sternchen gehts nicht. Also kein:
select df_1 from tabelle1 union select df_1 from tabelle2
(wenn das DF in tabelle2 df_2 heisst und beide Tabellen nur eine Dimension haben)
Gruss,
Ludger
yo,
die reihenfolge der spalten beider select statements reicht vollkommen aus, um zwei spalten gleichen typs miteinander verbinden zu können.
Ilja
Hi,
die reihenfolge der spalten beider select statements reicht vollkommen aus, um zwei spalten gleichen typs miteinander verbinden zu können.
unter den o.g. Voraussetzungen gibt
select df_1 from tabelle1 union select df_2 from tabelle2
eine Datensatzmenge bestehend aus allen Datensaetzen beider Tabellen zurueck, wobei allerdings der Datenfeldname aus tabelle1 uebernommen wird.
Bei den Datentypen ist der MS SQL Server 2000 sogar recht tolerant, also char(10) in df_1 und char(20) in df_2 frisst er auch.
Gruss,
Ludger
yo,
unter den o.g. Voraussetzungen gibt
select df_1 from tabelle1 union select df_2 from tabelle2
eine Datensatzmenge bestehend aus allen Datensaetzen beider Tabellen zurueck, wobei allerdings der Datenfeldname aus tabelle1 uebernommen wird.
dass sich ein dbms letztlich für einen namen entscheiden muss, dass liegt auf der hand. aber es ging darum, ob die beiden namen identsich sein müssen, damit das dbms sie miteinander verbinden kann. und genau das ist nicht der fall.
Bei den Datentypen ist der MS SQL Server 2000 sogar recht tolerant, also char(10) in df_1 und char(20) in df_2 frisst er auch.
nicht nur bei mssql, sondern auch oracle macht das. letztlich spielt es eigentlich gar keine rolle, ob die typen gleich sind, da es sich ja nur um das zusammenfügen zweier mengen handelt und nur die anzahl der spalten gleich sein muss.
Ilja
Hi,
dass sich ein dbms letztlich für einen namen entscheiden muss, dass liegt auf der hand. aber es ging darum, ob die beiden namen identsich sein müssen, damit das dbms sie miteinander verbinden kann. und genau das ist nicht der fall.
ja, richtig. D.h. es ging letztlich bei der urspruenglichen Fehlermeldung um den Datentyp.
nicht nur bei mssql, sondern auch oracle macht das. letztlich spielt es eigentlich gar keine rolle, ob die typen gleich sind, da es sich ja nur um das zusammenfügen zweier mengen handelt und nur die anzahl der spalten gleich sein muss.
Hoert sich plausibel an, weil ja Werte aller Datentypen als Zeichenkette darstellbar sind, allerdings konvertiert der MS SQL Server nicht automatisch in einen Zeichenkettentyp, sondern meldet z.B.:
Syntaxfehler beim Konvertieren des varchar-Wertes 'ss ' in eine Spalte vom Datentyp int.
(SQL_Statement: select * from tabelle1 union select * from tabelle2, wobei unterscheidliche Datentypen (char/int) gegeben sind]
Aber erst dann, wenn es auch Datensaetze gibt, die sich nicht typkonvertieren lassen, also soz. zur Laufzeit.
Gruss,
Ludger
yo,
ja, richtig. D.h. es ging letztlich bei der urspruenglichen Fehlermeldung um den Datentyp.
ohne kleinlich sein zu wollen, die fehlermeldung kam wohl eher daher, dass die beiden selects eine unterschiedliche anzahl von spalten hatten.
Ilja
Hi!
ohne kleinlich sein zu wollen, die fehlermeldung kam wohl eher daher, dass die beiden selects eine unterschiedliche anzahl von spalten hatten.
Wenn man Recht hat, darf man auch mal ein wenig kleinlich sein. :-)
Gruss,
Ludger