Ankündigung

Einklappen
Keine Ankündigung bisher.

Select from inner join on where

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Select from inner join on where

    Hallo mal wieder.

    Auf der Suche nach einem feinen SQL SELECT bin ich mir nicht sicher ob das so korrekt ist. Zumindest funktioniert es, was wohl nichts zu bedeuten hat. Auf diversen Webseiten wird davor gewarnt INNER JOIN ON mit WHERE zu verwenden.

    So in etwa soll das aussehen:
    Code:
    SELECT Orders.OrderID, Customers.CustomerName, Customers.PostalCode
    FROM Orders
    INNER JOIN Customers
    ON Orders.CustomerID = Customers.CustomerID
    WHERE Customers.PostalCode = '67000';
    Test: https://www.w3schools.com/sql/trysql...ect_join_inner

    Meine Frage ist nun, ob das so korrekt und auch sicher sowie effizient ist, also allgemein sozusagen valide.

  • #2
    Zitat von psoido Beitrag anzeigen
    Auf diversen Webseiten wird davor gewarnt INNER JOIN ON mit WHERE zu verwenden.
    Whot? Links?
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      By Mysql könnte es sinnvoll sein die Tabellen umzukehren, zumindest wegen des Where auf die gejointe Tabelle. Das muss du mal ausprobieren. Schau dir auch das explain dazu an. Hast du auf PostalCode einen Index?

      Where schränkt die Datensätze ein, warum sollte man das nicht mit JOIN verwenden dürfen?

      Kommentar


      • #4
        Ja im Internet steht viel geschrieben. Mit INNER JOIN ON und WHERE kann es wohl Probleme geben, muss aber nicht, wenn alles korrekt gemacht wird.

        Also, es geht um Tags (Stichwörter). In `Orders` sind alle webpages gelistet, bei denen ein Tag gespeichert wurde, bzw. für jedes Tag auf jeder Webpage ein row in `Orders`. Da stehen aber nicht die Tags drin, sondern pro row eine webpageID und eine TagID. In `Customers` stehen dann die Tags, jeweils mit table ID. Wieso das so ist und nicht anders ist dem zu verdanken, der sich dieses völlig überladene CMS ausgedacht hat, dass gar nicht mal so unbekannt ist. Logischer wäre natürlich die Tags per Name gleich in `Orders` zu speichern. Das würde viel Aufwand, auch mir hier jetzt, ersparen. Dann müsste ich nur die rows mit der gewünschten webpageID in `Orders` WHEREn und die cell der col ausgeben lassen. Aber wahrscheinlich ist die Sache um die Tags größer gedacht, so dass per Tag-Name eine Liste an webpages ausgegeben werden kann. Wobei, dass wie eben erklärt auch mit einer table möglich wäre. Ach ich weiß auch nicht wer sich da was dabei gedacht hat.

        Also `Orders` hat viele rows und `Customers` sehr wenige. Ob es jetzt Sinn macht das SELECT umzudrehen, weiß ich nicht. Es funktioniert, was mich insoweit freut.

        Kommentar


        • #5
          Zitat von psoido Beitrag anzeigen
          Ja im Internet steht viel geschrieben. Mit INNER JOIN ON und WHERE kann es wohl Probleme geben, muss aber nicht, wenn alles korrekt gemacht wird.
          Davon hör ich zum ersten mal und ich hatte in 15 Jahren nie Probleme damit.

          Man soll nicht alles glauben, was man im Internet liest.

          Kommentar


          • #6
            Vielleicht ist bei der Überlieferung etwas schief gegangen und es ist schon so lange her, dass keiner sich mehr an die Original Aussage erinnert, die wahrscheinlich noch von den Neandertalern stammt:
            OUTER JOIN und WHERE könnte Probleme geben, aber nur, wenn man es falsch macht.
            "Probleme" bedeutet dann, es werden zu wenig Daten angezeigt-heimtückisch-, so als hätte man- Achtung!- einen INNER JOIN verwendet.

            Quasi Ursache und Wirkung vertauscht. Der INNER JOIN ist nicht das Problem, sondern das problematische Ergebnis eines OUTER JOINS in falscher Kombi mit WHERE!
            (Um nicht weiter Gerüchte zu streuen: Auch OUTER JOINS kann man mit WHERE Bedingung nutzen, wenn man es richtig macht)

            Also ich könnte mir jedenfalls vorstellen, so war das mal irgendwann gemeint. Zumindest ist es tatsächlich so mit den Outer Joins und dem Where.
            Ob Deine Internet Geschichten das ursprünglich meinten, ist natürlich Spekulation.

            Kommentar


            • #7
              Es gibt wohl Probleme, wenn Fehler beim WHERE gemacht werden. Egal. Ich wollte das hier nur mal validieren lassen. Danke!

              Kommentar


              • #8
                Es gibt immer Probleme, wenn Fehler gemacht werden Das liegt an der Natur der Sache.

                Kommentar

                Lädt...
                X