christian: join unter access

hi ,

weiß jemand wie ich einen Join von zwei tabellen unter access definieren muss(SQL Befehl)?

das geht nicht:

select * from tabelle1, tabelle2 where tabelle1.id = tabelle2.id

grüße christian

  1. Hallo Christian,

    probier mal Folgendes:

    SELECT wert1, wert2, wert3 FROM table1 INNER JOIN table2 ON table1.id = table2.id;

    Soweit ich mich erinnere, kannst Du bei Access einfach eine Abfrage per drag&drop machen und Dir unter Ansicht > SQL-Abfrage, den dazugehörigen SQL-Code ansehen.

    Hoffe, das hilft weiter!

    Jose

  2. Halihallo christian

    weiß jemand wie ich einen Join von zwei tabellen unter access definieren muss(SQL Befehl)?
    select * from tabelle1, tabelle2 where tabelle1.id = tabelle2.id

    Die Syntax ist korrekt und selbst Access kennt diesen simplen JOIN. Folglich tippe ich,
    dass _du_ einen Fehler machst. Nenn uns die Fehlermeldung!

    @Jose: IMHO ist INNER JOIN eine Syntax, die es nur in MySQL gibt.

    Viele Grüsse

    Philipp

    1. Hallo

      select * from tabelle1, tabelle2 where tabelle1.id = tabelle2.id
      Die Syntax ist korrekt und selbst Access kennt diesen simplen JOIN.

      Das ist korrekt. Auch ACCESS kann diesen Unsinn.

      SELECT tabelle1.*, tabelle2.* FROM tabelle1 INNER JOIN tabelle2 ON tabelle1.ID = tabelle2.ID

      kann es allerdings auch. Das ist, meiner Meinung nach, SQL. Das da oben ist Stückwerk. Begründung: Die Verbindung von mehreren Tabellen über Schlüsselfelder nennt man in SQL einen JOIN. Man macht so etwas in SQL also mit einem JOIN. Nach WHERE steht eine Begingung, die bestimmte Datensätze herausfiltert. Das kann durchaus _zusätzlich_ zu einem JOIN notwendig sein.

      @Jose: IMHO ist INNER JOIN eine Syntax, die es nur in MySQL gibt.

      Wie kommst Du zu dieser Meinung?

      viele Grüsse

      Axel

      1. Halihallo Axel

        select * from tabelle1, tabelle2 where tabelle1.id = tabelle2.id
        Die Syntax ist korrekt und selbst Access kennt diesen simplen JOIN.
        Das ist korrekt. Auch ACCESS kann diesen Unsinn.

        Unsinn? - Weil ein INNER JOIN eigentlich das Kreuzprodukt erzwingt (obwohl natürlich
        vom QueryOptimizer optimiert) und somit aperformant "klingt"?

        kann es allerdings auch. Das ist, meiner Meinung nach, SQL. Das da oben ist Stückwerk. Begründung: Die Verbindung von mehreren Tabellen über Schlüsselfelder nennt man in SQL einen JOIN. Man macht so etwas in SQL also mit einem JOIN. Nach WHERE steht eine Begingung, die bestimmte Datensätze herausfiltert. Das kann durchaus _zusätzlich_ zu einem JOIN notwendig sein.

        Ja und? - Das ist doch keine Argumentation, die mich in der Meinung wiederlegt, warum
        es INNER JOIN nur bei MySQL gibt.

        @Jose: IMHO ist INNER JOIN eine Syntax, die es nur in MySQL gibt.
        Wie kommst Du zu dieser Meinung?

        Tja, jetzt frage ich mich auch :-)
        Ich hatte mir folgendes überlegt:
        Ein INNER JOIN und die Kommagetrennte Liste der WHERE-Klausel sind semantisch äquivalent.
        Beide machen einen Full Table Join und selektieren dann aufgrund Kriterien.
        Frag mich nicht warum, aber ich dachte, dass diese INNER JOIN - Syntax nur MySQL
        spezifisch sei (eigentlich ist die eine oder andere Syntax ja redundant).

        Danke für die Korrektur!

        Viele Grüsse

        Philipp

        1. Hallo Philipp

          select * from tabelle1, tabelle2 where tabelle1.id = tabelle2.id
          Die Syntax ist korrekt und selbst Access kennt diesen simplen JOIN.
          Das ist korrekt. Auch ACCESS kann diesen Unsinn.
          Unsinn? - Weil ein INNER JOIN eigentlich das Kreuzprodukt erzwingt (obwohl natürlich
          vom QueryOptimizer optimiert) und somit aperformant "klingt"?

          Da ist kein großer Unterschied. Auch

          SELECT * FROM tabelle1, tabelle2

          verbindet erstmal jeden Datensatz aus tabelle1 mit jedem Datensatz aus tabelle2. WHERE filtert dann die heraus, bei denen gilt:

          tabelle1.id = tabelle2.id

          @Jose: IMHO ist INNER JOIN eine Syntax, die es nur in MySQL gibt.
          Wie kommst Du zu dieser Meinung?
          Tja, jetzt frage ich mich auch :-)
          Ich hatte mir folgendes überlegt:
          Ein INNER JOIN und die Kommagetrennte Liste der WHERE-Klausel sind semantisch äquivalent.
          Beide machen einen Full Table Join und selektieren dann aufgrund Kriterien.
          Frag mich nicht warum, aber ich dachte, dass diese INNER JOIN - Syntax nur MySQL
          spezifisch sei (eigentlich ist die eine oder andere Syntax ja redundant).

          SQL-89 standard for inner joins:

          SELECT TableA.Field1, TableB.Field2, blah, blah
          FROM TableA, TableB
          WHERE TableA.Field1=TableB.Field2

          SQL-92 standard:

          SELECT TableA.Field1, TableB.Field2, blah, blah
          FROM TableA
          INNER JOIN TableB
          ON TableA.Field1=TableB.Field2
          WHERE Blah (any non-linking criteria)

          Das meinte ich. JOIN ist für die Tabellenverbindung, WHERE ist für die Filterung zuständig. Das ist einfach übersichtlicher als komplex verschachtelte WHERE-Klauseln.

          Leider habe ich noch keine komplette SQL-Standard-Bibliothek gefunden. Nur gegen Bezahlung:

          International Organization for Standardization
          1 Rue de Varembé
          Case postale 56
          CH-1211, Geneva 20, Switzerland
          Phone: +41.22.749.0111
          Fax: +41.22.733.3430
          Web site: http://www.iso.ch/

          or from their web store:
          http://www.iso.ch/cate/cat.html

          allerdings ist JOIN (INNER JOIN, LEFT JOIN, RIGHT JOIN) Bestandteil der ISO-SQL-92 Standards.

          viele Grüße

          Axel

          1. Halihallo Axel

            select * from tabelle1, tabelle2 where tabelle1.id = tabelle2.id
            Die Syntax ist korrekt und selbst Access kennt diesen simplen JOIN.
            Das ist korrekt. Auch ACCESS kann diesen Unsinn.
            Unsinn? - Weil ein INNER JOIN eigentlich das Kreuzprodukt erzwingt (obwohl natürlich
            vom QueryOptimizer optimiert) und somit aperformant "klingt"?
            Da ist kein großer Unterschied. Auch
            SELECT * FROM tabelle1, tabelle2
            verbindet erstmal jeden Datensatz aus tabelle1 mit jedem Datensatz aus tabelle2. WHERE filtert dann die heraus, bei denen gilt:
            tabelle1.id = tabelle2.id

            Ja, das ist mir wohl bewusst. Ich wollte nur nachfragen, warum du Unsinn sagtest :-)
            Alle heutigen QueryOptimizer untersuchen erst die Where-Klausel und binden das beim
            Selektieren ein, folglich ist das crossproduct nur der Worst-Case, kommt jedoch nur
            seltener vor (nicht immer). Aber lassen wir das.

            Das meinte ich. JOIN ist für die Tabellenverbindung, WHERE ist für die Filterung zuständig. Das ist einfach übersichtlicher als komplex verschachtelte WHERE-Klauseln.

            FULL ACK.

            Leider habe ich noch keine komplette SQL-Standard-Bibliothek gefunden. Nur gegen Bezahlung:

            The Complete Reference - SQL
            von James R. Groff & Paul N. Weinberg
            ISBN: 0-07-211845-8
            s. 174ff

            soeben nachgelesen.

            allerdings ist JOIN (INNER JOIN, LEFT JOIN, RIGHT JOIN) Bestandteil der ISO-SQL-92 Standards.

            Korrekt. Danke für die Korrektur! *schäm*

            Viele Grüsse und Danke

            Philipp

            1. Halihallo Axel

              Das meinte ich. JOIN ist für die Tabellenverbindung, WHERE ist für die Filterung zuständig. Das ist einfach übersichtlicher als komplex verschachtelte WHERE-Klauseln.

              FULL ACK.

              ... und darauf hast du natürlich die ganze Zeit hinauswollen[1]. Ich scheine heute sehr
              unkonzentriert zu sein, entschuldige. Wie schon gesagt: Ich bin hier voll und ganz
              deiner Meinung.

              [1] musste erst den ganzen Thread nochmals lesen, um dies zu verstehen.

              Viele Grüsse

              Philipp