join unter access
christian
- datenbank
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
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
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
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
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
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
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
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