Announcement

Collapse
No announcement yet.

Zwei Tabellen verbinden (JOIN)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Zwei Tabellen verbinden (JOIN)

    hallo zusammen,

    ich versuche seit stunden zwei tabellen miteinander zu verbinden: sie sehen in vereinfachter weise so aus:

    1. Tabelle (SPALTENNAMEN)
    ---------
    Total
    Anzahl Besucher Freitag
    Quote Besucher Freitag
    ....


    2. Tabelle (SPALTENNAMEN)
    -----------
    Total
    Anzahl Besucher Donnerstag
    Quota Besucher Donnerstag
    ......


    Die zu erstellende Tabelle sollte dann in etwa so aussehen:

    (SPALTENNAMEN):

    Total
    Anzahl Besucher Freitag
    Quote Besucher Freitag
    Anzahl Besucher Donnerstag
    Quote Besucher Donnerstag
    ....

    Es lässt sich leicht lösen mit:

    SELECT a.Total, a.Anzahl Besucher Freitag, a.Quote Besucher Freitag, b.Anzahl Besucher Donnerstag, b.Quote Besucher Donnerstag FROM tabelle1 aLEFT JOIN tabelle2 b ON a.Total = b.Total

    Das Problem dabei ist, dass ich vorne immer genau definieren muss, welche Spalten in der neuen Tabelle erscheinen sollen. Schreibe ich anstelle dessen einfach SELECT * FROM .... -> so gibt dies eine Fehlermeldung, weil in beiden Tabellen eine Spalte den Namen "Total" trägt (in diesem kleinen fiktiven Beispiel ist dies kein Problem, meine Tabellen sind aber extrem viel grösser)

    Gibt es eine Möglichkeit, die beiden Tabellen zu der gewünschten Zieltabelle zu verbinden... So im Stile von :
    SELECT * FROM tabelle1 LEFT JOIN tabelle2 ON tabelle1.Total = tabelle2.Total ;

    Über einen Ratschlag würde ich mich sehr freuen.

    Viele Grüsse
    Barbara

  • #2
    Hi,

    versuch es mal mit select a.*,b.*

    Gruß
    docendo discimus

    Comment


    • #3
      Hallo Barbara,

      der SQL Server stört sich in keinster Weise daran, wenn Feldnamen identisch sind; dadurch wird es keinen Fehler geben.

      Was den Fehler auslösen wird, sind Deinen Feldnamen

      SELECT a.Total, a.Anzahl Besucher Freitag

      Das geht so nicht, Leerzeichen ist ein Trenner, danach darf höchsten die Alias-Definition mit .. AS AliasNamen kommen.

      Wenn ein Feldnamen Leer- oder Sonderzeichen enthält, muss Du ihn in eckige klammern setzen, also

      SELECT a.Total, a.[Anzahl Besucher Freitag]
      Olaf Helper

      <Blog> <Xing>
      * cogito ergo sum * errare humanum est * quote erat demonstrandum *
      Wenn ich denke, ist das ein Fehler und das beweise ich täglich

      Comment


      • #4
        danke schon mal für die antworten. leider hilft mir dies noch nicht weiter.

        ich versuche mein problem nochmals konkreter zu formulieren:

        2 Ausgangstabellen:

        1. Tabelle mit den Spalten
        --------------------------------
        ID
        Anzahl_Jahr00
        Gewicht_Jahr00

        2. Tablle mit den Spalten
        -------------------------------
        ID
        Anzahl_Jahr01
        Gewicht_Jahr01

        Die resultierende Tabelle soll als neue Tabelle in die Datenbank abgelegt werden und die folgenden Spalten aufweisen

        ID
        Anzahl_Jahr00
        Anzahl_Jahr01
        Gewicht_Jahr00
        Gewicht_Jahr01

        Kein Problem mit:
        SELECT a.Total, a.Anzahl_Jahr00, b.Anzahl_Jahr01, a.Gewicht_Jahr00, b.Gewicht_Jahr01
        INTO ausgabetabelle
        FROM tabelle1 a LEFT JOIN tabelle2 b ON a.ID= b.ID

        Mein Problem ist, dass ich ein Java-Programm schreibe, die diese SQL Statements dynamisch erstellt und in der linken Tabelle nicht immer nur diese beiden, sondern je nachdem viel mehr Spalten stehen können.

        Comment


        • #5
          Hi,

          leider verstehe ich Dein Problem nicht ganz.
          Warum kannst Du nicht schreiben:
          Select a.*,b.* INTO ausgabetabelle
          FROM tabelle1 a LEFT JOIN tabelle2 b ON a.ID= b.ID

          docendo discimus

          Comment


          • #6
            hi,

            kriege dabei immer folgende fehlermeldung:

            Meldung 2705, Ebene 16, Status 3, Zeile 1
            Spaltennamen müssen in jeder Tabelle eindeutig sein. Der Spaltenname 'ID' wurde in der 'test'-Tabelle mehrmals angegeben.

            test-Tabelle = output-Tabelle

            lässt man das "into test" weg, funktioniert es.... d.h. bei der reinen abfrage ist es egal, ob es zwei gleichbenannte spalten hat. bei der erstellung einer neuen tabelle funktioniert es nicht.

            allerdings hat mich dein vorschlag zum ziel geführt:

            select a.*, b.anzahl, b.gewicht from tablle1 a left join tabelle2 b on a.id = b.id


            glaube, dass es so funktioniert.

            danke

            Comment


            • #7
              Hallo Barbara,

              langsam lichtet sich das Dunkel:
              SELECT a.Total, a.Anzahl_Jahr00, b.Anzahl_Jahr01, a.Gewicht_Jahr00, b.Gewicht_Jahr01
              INTO ausgabetabelle
              FROM tabelle1 a LEFT JOIN tabelle2 b ON a.ID= b.ID
              Mit dem Statement generierst Du sozusagen eine neue Tabelle (Du insertest also nicht in eine vorhandene).

              Beim Anlegen der neuen Tabelle werden die Feldnamen des SELECT Statements verwendet und wenn dort Feldnamen doppelt sind, dann rumst es eben; Feldnamen in einer Tabelle müssen zwingend eindeutig sein.
              Das geht so nicht, Du musst Die Feldnamen eindeutig & unique angeben, da führt kein Weg drum rum.
              Olaf Helper

              <Blog> <Xing>
              * cogito ergo sum * errare humanum est * quote erat demonstrandum *
              Wenn ich denke, ist das ein Fehler und das beweise ich täglich

              Comment

              Working...
              X