Ankündigung

Einklappen
Keine Ankündigung bisher.

Innerjoin Abfrage Hilfe

Einklappen

Neue Werbung 2019

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

  • Innerjoin Abfrage Hilfe

    Hallo

    habe folgende 3 Tabellen

    Tabelle 1
    iId,iReceiptDate,iAccountingDate,fBetrag,sTripId,i Version,sSpesenart,sBeschreibung,sDVCode,sBUCode,s BLCode,sBuKrs,sCostTypeNew,iCompanyCode,sFileId

    Tabelle 2
    iId,iAccountingDate,sFileId,sTripId,iVersion,iActu alVersion,sLand,sOrt,iStartDatum,iEndDatum,iKm,iDa uer,sBukrs,sBUCode

    Tabelle 3
    iId,sTripId,iVersion
    ich möchte eine Abfrage über alle 3 Tabellen machen
    ich brauche konkret die ID, Start und Enddatum, Trip ID, FileID, Land, Ort Dauer und Bukurs (also den Preis)

    so versucht habe ich das hier:
    Code:
    SELECT a.iId, b.iStartDatum, b.EndDatum, b.iDauer, a.sTripId, b.sFileId, b.sLand, b.sOrt, a.fBetrag, b.sBukrs
    FROM report_trip a, report_tripselect b, report_receipt c 
    WHERE a.`iId`= b.iId and  a.`iId`= c.iId and c.sSpesenart='HOTL'
    aber ich bekomme immer Fehler
    SQL Error Unknown column b.iStartDatum in field list

    aber die Spalte gibt's doch in Tabelle 2

  • #2
    Hi,

    heißt deine 2. Tabelle report_tripselect? Warum arbeitest Du nicht direkt mit JOIN?!

    mfg Wolf29
    while (!asleep()) sheep++;

    Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

    Kommentar


    • #3
      Ganz offensichtlich ja nicht! Vielleicht solltest du das mit a b c einfach lassen und die richtigen Tabellennamen verwenden...

      PS: Man kann nicht nachvollziehen was Tabelle1/2/3 in deinem Query ist!. Ich würde behaupten c = Tabelle 1, b = Tabelle 3, a = Tabelle 2

      Kommentar


      • #4
        Danke für eure Anworten. Ja die Tabellen heißen so.
        Ich dachte damit: report_trip a, report_tripselect b, report_receipt c
        kann ich das zuweisen welche Tabelle welche ist. Sorry ich bin Anfänger
        Mit Joins habe ich noch nicht richtig gerafft
        Ich habe zwar unzählige Beispiele gefunden aber ich verstehe die Logik noch nicht ganz

        Tabelle 1 = report_trip = a ???
        iId,iReceiptDate,iAccountingDate,fBetrag,sTripId,i Version,sSpesenart,sBeschreibung,sDVCode,sBUCode,s BLCode,sBuKrs,sCostTypeNew,iCompanyCode,sFileId

        Tabelle 2 = report_tripselect = b ???
        iId,iAccountingDate,sFileId,sTripId,iVersion,iActu alVersion,sLand,sOrt,iStartDatum,iEndDatum,iKm,iDa uer,sBukrs,sBUCode

        Tabelle 3 = report_receipt = c ???
        iId,sTripId,iVersion

        Kommentar


        • #5
          Das stimmt so nicht. In dem Query steht c.sSpesenart='HOTL', das Feld kommt aber nur in Tabelle 1 vor und nicht in Tabelle 3. Du bringst dich mit den Aliasen/Umbennen der Tabellen selbst durcheinander, lass das einfach. Wenn die Tabelle report_trip heißt dann verwende doch einfach den Namen report_trip.

          Kommentar


          • #6
            so habe mal alles umbenannt - jetzt kommt kein Fehler und eine Liste

            Code:
            SELECT 
            report_receipt.iId, 
            report_trip.iStartDatum, 
            report_trip.iEndDatum, 
            report_trip.iDauer, 
            report_receipt.sTripId, 
            report_trip.sFileId, 
            report_trip.sLand, 
            report_trip.sOrt, 
            report_receipt.fBetrag, 
            report_trip.sBukrs
            
            FROM report_receipt , report_trip , report_tripselect 
            
            WHERE report_receipt.iId = report_trip.iId 
            and report_tripselect.iId = report_receipt.iId 
            and report_receipt.sSpesenart = "HOTL"
            wie würde das mit innerjoin aussehen?
            ist meine Abfrage jetzt richtig? ich bin mir nämlich bei den Bedingungen unten nicht sicher

            weitere Frage _ ich würde die Datenmenge gerne eingrenzen doch das Datum ist verschlüsselt. --> 1270850400
            In Excel mache ich das mit einer Formel
            = Q2 / 86400 + 25569

            Kommentar


            • #7
              so habe mal alles umbenannt - jetzt kommt noch ein Fehler
              Welcher?

              ist meine Abfrage jetzt richtig? ich bin mir nämlich bei den Bedingungen unten nicht sicher
              siehst du doch anhand des Ergebnisses!? Führst du das in phpmyadmin aus?

              mfg wolf29
              while (!asleep()) sheep++;

              Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

              Kommentar


              • #8
                Das ist meine Abfrage wobei ich den Wert für das Datum in Excel berechnet habe - heißt 1388530800 entspricht 31.12.2013.ich möchte mir als alles was nach 31.12.2013 aufgelaufen ist und HOTL ist anzeigen lassen.

                SELECT
                report_receipt.iId,
                report_trip.sOrt,
                report_trip.sLand,
                report_receipt.sTripId,
                report_trip.iStartDatum,
                report_trip.iEndDatum,
                report_trip.iDauer,
                report_receipt.fBetrag

                FROM report_receipt , report_trip , report_tripselect
                WHERE report_receipt.iId = report_trip.iId
                and report_tripselect.iId = report_receipt.iId
                and report_receipt.sSpesenart = "HOTL"
                and report_trip.iStartDatum > "1388530800"
                ich bekomme zu viele Daten - aber warum???

                ich mache das in heidi - dort gibt es ein Feld heisst: Query und drucke dann auf ausführen

                ich habe mir mal die Daten angeschaut und meine das einige doppelt sind

                1234000;"Forchheim, Dombühl";"DE";"1600103167";"1388962800";"138904920 0";"2";"69.5"
                1234000;"Forchheim, Dombühl";"DE";"1600103167";"1388962800";"138904920 0";"2";"7.5"

                das verstehe ich nicht - könnte auch sein das das zweite das Frühstück ist was extra abgerechnet wurde

                Kommentar


                • #9
                  Zitat von Catzenjaeger Beitrag anzeigen
                  wie würde das mit innerjoin aussehen?
                  So:
                  Code:
                  SELECT 
                  	report_receipt.iId, 
                  	report_trip.iStartDatum, 
                  	report_trip.iEndDatum, 
                  	report_trip.iDauer, 
                  	report_receipt.sTripId, 
                  	report_trip.sFileId, 
                  	report_trip.sLand, 
                  	report_trip.sOrt, 
                  	report_receipt.fBetrag, 
                  	report_trip.sBukrs
                  FROM
                  	report_receipt INNER JOIN
                  	report_trip ON (report_receipt.iId = report_trip.iId) INNER JOIN
                  	report_tripselect ON (report_tripselect.iId = report_receipt.iId)
                  WHERE 
                  	report_receipt.sSpesenart = "HOTL"
                  Der Unterschied ist das die JOIN Bedingung mit in die FROM Klausel wandert.

                  Zitat von Catzenjaeger Beitrag anzeigen
                  das Datum ist verschlüsselt
                  Das ist nicht verschlüsselt, das ist ein Unix Timestamp (Sekunden seit 1970). Prinzipiell haben die aber nix in eine Datenbank zu suchen. Es gibt für Datumsangaben Datentypen auf die die Datenbank optimiert ist und entsprechende Funktionen mitliefert. Du kannst aber mit FROM_UNIXTIME()/UNIX_TIMESTAMP() das Datum konvertieren.

                  Z.B.:

                  WHERE
                  report_receipt.sSpesenart = "HOTL" AND
                  report_trip.iStartDatum > UNIX_TIMESTAMP('2014-01-01 00:00:00')

                  Kommentar


                  • #10
                    Ah danke für deine Erklärungen

                    Meine letzte Frage; gibts einen Unrterschied zwischen meiner Abbfrage und Deiner Abgage bezüglich der Ergebnisse? Also ich meine kommt da was anderes raus (kanns leider zu Hause nicht probieren) oder worin leigen die Unterscheide - falls kein Unterscheid - warum dann das ganze?

                    Kommentar

                    Lädt...
                    X