Mario: SELECT aus zwei Tabellen

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

  1. Hi,

    es koennte da den UNION-Operator geben:
    SELECT
     *
    FROM
     table_1
    UNION SELECT
     *
    FROM
     table_2

    Gruss,
    Ludger

    --
    "Die SPD im Auwind?"
    1. 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

      1. 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

        --
        "Die SPD im Aufwind?"
        1. 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

        2. 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

          1. 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

            --
            "Wenn der Wind von dorther ueber die Felder weht dann weiss ich es wird Sommer."
            1. 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

              1. 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

                --
                "Wer nicht kaempft hat schon gewonnen."
                1. 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

                  1. yo,

                    die reihenfolge der spalten beider select statements reicht vollkommen aus, um zwei spalten gleichen typs miteinander verbinden zu können.

                    Ilja

                    1. 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

                      --
                      "Wer nicht kaempft hat schon gewonnen."
                      1. 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

                        1. 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

                          --
                          "Wer nicht kaempft hat schon gewonnen."
                          1. 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

                            1. 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

                              --
                              "Wer nicht kaempft hat schon gewonnen."