join problem

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

  • join problem

    hallo,

    ich habe folgendes problem mit einem join. vorab hier mein sql statement:

    $sql="SELECT benutzer.nachname,benutzer.aktiv,infodata.id,infodata.description FROM benutzer RIGHT OUTER JOIN infodata ON(benutzer.banktitel=infodata.code)
    WHERE benutzer.aktiv='1' AND infodata.id='2260' ORDER BY benutzer.nachname";

    ich möchte aus der tabelle benutzer den vollständigen namen haben. wenn in der spalte benutzer.bankitel ein zahlenwert eingetragen ist, dann soll er den dazu passenden namen aus der tabelle infodata anzeigen. nun funktioniert es so, dass nur die anzeigt die auch den schlüssel in der spalte benutzer.banktitel stehen haben. die datensätze die in dieser spalte keine wert stehen haben ignorriert er auch im ergebnis. (somit gibts nur akademiker )

    bitte um eure hilfe

  • #2
    ich glaube ich konnte mein problem nun eingrenzen. die where klausel mit der id 2260 ist schuld daran.
    ich möchte aber die abfrage nur auf datensätze mit dieser id anwenden.


    danke für eure hilfe

    Kommentar


    • #3
      irgendwie versteh ich dein Problem nicht so ganz

      meinst Du das bei der Ausgabe Datensätze fehlen? Also möchtest Du zusätzlich zu allen mit der ID 2260 auch die haben, bei denen in der Benutzer-Tabelle KEIN Banktitel eingetragen ist?

      Versuch das nochmal ein bissel genauer zu beschreiben bitte Also was Du jetzt rausbekommst, und das daran nicht richtig ist

      Kommentar


      • #4
        ich bekomme nur die raus, die auch in der benutzertabelle einen schlüssel eingetragen haben. ich möchte aber alle benutzer. die dann einen titel haben sollen ihn angezeigt bekommen. leider ist die tabelle für die titel nicht nur für titel bestimmt. da steht auch noch ne menge anderes zeug drin. also nur die mit der id 2260 sind banktitel. und genau diese where klausel (where id=2260) sorgt dafür dass ich nur mitarbeiter mit titel angezeigt bekomme. ich hoffe das war verständlich.

        ich möchte also alle mitarbeiter. titel vorhanden -> anzeigen. kein titel -> zelle leer lassen.

        danke nochmals

        Kommentar


        • #5
          ok, dann solltest Du es einfach mal mit einem LEFT join (evtl. INNER, da bin ich grad net sicher) versuchen.

          RIGHT outer join bedeutet ja, daß er nur zu die Datensätze anzeigt, zu denen er in der linken Tabelle eine entsprechung findet.

          Bei einem Left Join, zeigt er aus der linken Tabelle alle Datensätze an, und halt wenn vorhanden, die Entsprechung aus der rechten.

          Kommentar


          • #6
            ich hab auch den left outer schon versucht. funktioniert auch nicht. und ich galube es liegt an der anschl where klausel die besagt "where id=2260".
            somit nehm ich doch dem left join die wirkung --> oder lieg ich hier falsch

            ich muß mich aber zwingend an diese id halten, da meine benötigten werte alle die id 2260 haben.

            noch nen tipp??

            Kommentar


            • #7
              probier mal deine id-abfrage als HAVING zu machen, evtl. geht's dann
              Code:
              SELECT benutzer.nachname,benutzer.aktiv,infodata.id,infodata.description FROM benutzer 
              RIGHT OUTER JOIN infodata 
              ON(benutzer.banktitel=infodata.code)
              HAVING infodata.id='2260'
              WHERE benutzer.aktiv='1' 
              ORDER BY benutzer.nachname
              ohne gewähr
              Ich denke, also bin ich. - Einige sind trotzdem...

              Kommentar


              • #8
                könntest Du mal die Table-Strukturen posten? Dann kann ich hier lokal mal ein bissel rumtesten, kann ja net so schwer sein

                Kommentar


                • #9
                  da es sich leider um keine mysql db handelt kann ich auch nicht so leicht einen dump erstellen. ich hab hier nur mittels access lesenden zugriff auf eine oracle db. aber ich versuchs mal so:

                  tabelle infodata:

                  ID Zahl PK
                  CODE Text PK
                  DESCRIPTION Text
                  SORT Text

                  tabelle benutzer:

                  BENUTZER TEXT
                  OE ZAHL
                  NACHNAME TEXT
                  VORNAME TEXT
                  BANKTITEL ZAHL
                  MITARBEITERNUMMER ZAHL PK

                  So das wär also die struktur im groben. In der Tabelle Infodata steht dann in der spalte code der wert für den banktitel zb. 1 für Direktor usw. In der Benutzertabelle beim jeweiligen Mitarbeiter in der spalte Banktitel wieder der wert dür den banktitel.

                  thx again

                  Kommentar

                  Lädt...
                  X