• hallo.

    ähm - wie geht das genau mit den JOIN's?
    ich habe zb. eine tabelle `users` - mit einer spalte `user_id` - dann eine tabelle `profile` mit einer spalte `user_nr`.

    kann ich jetzt mit einem JOIN das SELECT vereinfachen oder hab ich was falsch verstanden?
    wie müsste ich das machen?

    danke - phore

  • Code
    FROM QuellTabelle1 [Join-Typ] Tabelle [ON (Join Bedingung)

    Inner Join: Inner Join gibt nur die Datenreihen aus den Tabellen an, welche eine gemeinsame Übereinstimmung besitzten. Z.B.: Sie erhalten nur jene Produkte die einem Lieferanten auch zugeordnet sind.

    Outer Join: Outer Join beinhalten auch Datenreihen die keine verwandten Daten in der anderen Tabelle besitzen. Bei der Verwendung von Outer Join bekommen Sie z. B. auch Lieferanten die (im Moment) keine Produkte an Sie liefern.


    beispiel:

    SQL
    SELECT ProductName, CompanyName, UnitPrice 
    FROM Suppliers INNER JOIN Products
    ON (Suppliers.SupplierID = Products.SupplierID) 
    WHERE UnitPrice <= $70

    wennst access hast, kannst dir glaub ich auch mal testweise sowas
    zusammenbasteln und dann anschauen....

  • also bei mir würde es etwa so aussehen?

    SQL
    SELECT `irgendwas`
    FROM `profile`
    INNER JOIN `contact`
    ON (profil.user_nr = contact.user_nr)
    WHERE `user_nr` = '$userId'

    naja probieren geht über studieren - ich teste das mal :)
    danke dir

  • Cross Join, Kartesisches Produkt
    Verbindet jede Zeile der ersten Tabelle mit jeder Zeile der zweiten Tabelle

    Inner Join = Equivalent Join
    Verbindet Datensätze aus zwei Tabellen, sobald ein gemeinsames Feld dieselben Werte enthält.

    Natural Join
    Verknüpft die beiden Tabellen über die Gleichheit aller gleichlautenden Spalten. Gleichlautende Spalten werden im Ergebnis nur einmal angezeigt. Haben die Tabellen keine gleichlautenden Spalten, wird der Natural Join zum Cross Join. Gibt es nur eine gleichlautende Spalte, so ist der Natural Join ein Inner Join mit anschließender Projektion, bei der gleichnamige Spalten ausgeblendet werden.
    Für den Natural Join gibt es keinen speziellen SQL92-Befehl. Er wird bei Bedarf aus einem Inner Join mit anschließender Projektion erzeugt.

    Left Outer Join = Left Join
    Mit einem Left Join wird eine sogenannte linke Inklusionsverknüpfung erstellen. Linke Inklusionsverknüpfungen schließen alle Datensätze aus der ersten (linken) Tabelle ein, auch wenn keine entsprechenden Werte für Datensätze in der zweiten Tabelle existiert.

    Right Outer Join = Right Join
    Mit einem Right Join wird eine sogenannte rechte Inklusionsverknüpfung erstellen. Rechte Inklusionsverknüpfungen schließen alle Datensätze aus der zweiten (rechten) Tabelle ein, auch wenn keine entsprechenden Werte für Datensätze in der ersten Tabelle existiert.

    Full Outer Join = Full Join
    Eine Kombination von Left Outer Join und Right Outer Join.

    Union Join
    Ähnlich dem Full Outer Join werden Datensätze beider Tabellen aufgenommen. Sie werden aber nicht über eine Bedingung verknüpft.

    Semi-Join
    Der Semijoin der Tabellen "Mitarbeiter" und "Projekte" ist ein Natural Join der zwei Tabellen mit anschließender Projektion auf die Attribute der ersten Tabelle

    Theta Join, Non-Equivalent-Join
    Der Theta Join ist eine Verallgemeinerung des Inner Join. Während beim Inner Join die Gleichheit des Inhalts zweier Attribute verglichen wird, wird beim Theta Join der Inhalt der Attribute i und j mit einer beliebigen Formel Theta(i,j) verglichen, etwa i = j (i gleich j; InnerJoin), i < j (i kleiner j), i <= j (i kleiner oder gleich j), i > j (i größer j) usw

    Self-Join
    Der Self-Join ist ein beliebiger Join, bei dem nicht zwei verschiedene Tabellen benutzt werden, sondern zweimal dieselbe Tabelle.


    ich hab des zwar alles mal gelernt... aber dafür musst ich etz auch erstmal nachschauen *G*
    quelle

  • Ok danke..

    aber kann mir mal einer die abfrage auf join unsetzen:

  • sollte sein...

  • kannst du nochmals vereinfachen oder es dir anschauen...


    und ist das group by überhaupt nötig ?!

    bzw wiso?! der sollte doch nur daten holen die auch in shop_produckte enthalten sind oder ?!

    aber bei mir hollt der die imemr doppelt da einige prods mit mehreren news verknüpft sind

  • ja ich abe access..

    aber das währe schwachsinn das zu machen...

    mysQl ist doch ziemlich anders.

    aber das ich gepostet habe funktioniert...

    aber erscheint mir nicht optimal da ich ein group by verwenden muss..

    mir geht es bloß um die vermeidung von low querys..

    da das ding bis zu 5000 datensäte rausschmeissen wird.

  • ich meinte ja auch nur zum erstellen.

    hab damals mit sql server gearbeitet und die paar tabellen
    dann einfach in access verknüpft.
    so konnte ich jede abfrage problemlos erstellen...