none
sql Abfrage access Datenbank

    Frage

  • Hallo,

    in meiner Datenbank access gibt es drei Tabellen die hierfür benötigt werden.

    Tabelle "Uhrendatenarmband" - jeder Datensatz ist nur einmal vorhanden

    Tabelle "Auktionsdaten" - jeder Datensatz ist mindestens einmal oder bis zu 10mal vorhanden

    Tabelle "Neupreise" - jeder Datensatz ist mindestens einmal oder auch bis zu 10mal vorhanden

     

    Bei meiner unten aufgeführten SQL Abfrage werden die Datensätze aus den Tabellen "Uhrendatenarmband, Auktionsdaten und Neupreise" richtig angezeigt.

    Sobald aber mehr als ein Neupreis in der Tabelle "Neupreise"vorhanden ist, werden auch alle anderen Datensätze der Tabelle "Auktionsdaten erneut aufgerufen. Nur der Datensatz aus der Tabelle "Uhrendatenarmband" bleibt einmal stehen.

    Gewollt ist aber, das aus der Tabelle "Uhrendatenarmband" nachfolgend alle Datensätze aus den Tabellen "Auktionspreise und Neupreise" zusammen angezeigt werden.

    Wie muss ich die SQL Abfrage (nachstehend) neu schreiben?

    strSQL = "SELECT " & _
                "Uhrendatenarmband.ID AS Uhrendatenarmband_ID, " & _
                "Uhrendatenarmband.Uhrenart, " & _
                "Auktionsdaten.ID AS Auktionsdaten_ID, " & _
                "Auktionsdaten.RegNr, " & _
                "Auktionsdaten.Versteigerer, " & _
                "Neupreise.ID AS Neupreise_ID, " & _
                "Neupreise.Preis, " & _
                "Neupreise.Datum AS Neupreise_Datum " & _
            "FROM " & _
                "(" & _
                    "Auktionsdaten INNER JOIN Uhrendatenarmband " & _
                        "ON Auktionsdaten.ID = Uhrendatenarmband.ID" & _
                ")" & _
                " INNER JOIN Neupreise " & _
                    "ON Uhrendatenarmband.ID = Neupreise.ID " & _
            "WHERE " & _
                "Uhrendatenarmband.Uhrenart LIKE '%" & SQLEncode(Request.Form("qUhrenart")) & "%' AND " & _
                "Auktionsdaten.Baujahr LIKE '%" & SQLEncode(Request.Form("qBaujahr")) & "%' " & _
            "ORDER BY " & _          
                "Uhrendatenarmband.ID, " & _
                "Auktionsdaten.Datum," & _
                "Auktionsdaten.ZSP€netto"

     

    Vielen Dank für jede Hilfe

    Berben

    Dienstag, 1. November 2011 16:12

Antworten

  • Hi,

    das, was Du das versuchst, geht nicht. Du willst die Kopfdaten einmal und die anderen Daten ggfs. mehrfach anzeigen. Das löst man nicht über einen JOIN, sondern über drei separate Abfragen.

    In deinem Fall also bspw. so:

    Dim SqlStammdaten, RecordsetStammdaten
    Dim SqlAuktionsdaten, RecordsetAuktionsdaten
    Dim SqlNeupreise, RecordsetNeupreise
    
        SqlStammdaten = "SELECT ... FROM Uhrendatenarmband WHERE ID = 123"
        SqlStammdaten = "SELECT ... FROM Auktionsdaten WHERE ArmbandId = 123"
        SqlStammdaten = "SELECT ... FROM Neupreise WHERE ArmbandId = 123"
    
    

    Die aus den SQL Statements resultierenden Daten kannst Du dann jeweils in ein Recordset laden und die Daten ausgeben.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Dienstag, 1. November 2011 18:46

Alle Antworten

  • 1. Aufgrund des Namens und der Klammerung: Was für eine Datenbank benutzt du?

    2. Bevor du eine SQL in Anwendungscode einbettest, solltest du ihn erstmal in deinem Datenbankfrontend testen. Dann kannst du uns auch lesbareren Code posten.

    3. Benutze parameterisierte Abfragen.

    4. Handelt es sich bei deiner Anwendung um ASP oder ASP.NET ?

    5. Tabellenerstellungsskrip mit Inserts von Testdaten sind im Normal äußerst hilfreich.

    Dienstag, 1. November 2011 16:24
    Moderator
  • 1. Aufgrund des Namens und der Klammerung: Was für eine Datenbank benutzt du?


    Dem Subject des Posts und der Klammerung im JOIN nach geht es höchstwahrscheinlich um MS Access.

     


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing
    Dienstag, 1. November 2011 17:26
  • Hallo Olaf,

     

    es handelt sich um MS Access.

    Die Anwendung ist ASP

    Der Anwendungscode läuft bereits auf meiner Homepage unter www.uhrenpreisspiegel.de

    Dienstag, 1. November 2011 18:32
  • Dann verschiebe ich es mal in das korrekte Forum Microsoft Access, wenn keine Einwände bestehen.
    Dienstag, 1. November 2011 18:46
    Moderator
  • Hi,

    das, was Du das versuchst, geht nicht. Du willst die Kopfdaten einmal und die anderen Daten ggfs. mehrfach anzeigen. Das löst man nicht über einen JOIN, sondern über drei separate Abfragen.

    In deinem Fall also bspw. so:

    Dim SqlStammdaten, RecordsetStammdaten
    Dim SqlAuktionsdaten, RecordsetAuktionsdaten
    Dim SqlNeupreise, RecordsetNeupreise
    
        SqlStammdaten = "SELECT ... FROM Uhrendatenarmband WHERE ID = 123"
        SqlStammdaten = "SELECT ... FROM Auktionsdaten WHERE ArmbandId = 123"
        SqlStammdaten = "SELECT ... FROM Neupreise WHERE ArmbandId = 123"
    
    

    Die aus den SQL Statements resultierenden Daten kannst Du dann jeweils in ein Recordset laden und die Daten ausgeben.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Dienstag, 1. November 2011 18:46
  • Nebenbei bemerkt: Access als Datenbank für eine WebSite wirft früher oder später Probleme auf. Hier solltest du zumindest auf SQL Server 2008 R2 Express wechseln.
    Mittwoch, 2. November 2011 08:13
    Moderator