Synes sgu jeg kager lidt rundt i det Inner Join halløj:
Jeg skal bruge følgende data:
Tabel: Clients Felter: ID, Name
Tabel: Orders Felter: ID, OrderNo, CustomerID, Orderdate, Total
Tabel: CreditNotes Felter: ID, CreditnoteNo, CustomerID, Total
Jeg vil nu finde de Orders og CreditNotes som hænger sammen med hver Client, hvor CustomerID svarer til ID i Clients tabellen. Der skal kun hentes Orders ud where OrderStatus = 'Invoiced' og CreditNotes ud where CreditnoteStatus = 'OK'.
Jeg kan bare ikke få ID ud af Clients tabellen og en masse andet bøvl, så nu har jeg slettet alt og beder jeg kloge hoveder om hjælp :(
Nu er der godt nok ikke vist hvilke tabeller OrderStatus og CreditnoreStatus ligger, men jeg har gættet på at de ligger i hhv. Orders og CreditNotes. I så fald ville jeg forsøge med denne SQL:
SELECT c.*, o.*, cn.* FROM (clients c INNER JOIN orders o ON o.CustomerID = c.id) INNER JOIN creditnotes cn ON cn.CustomerID = c.id WHERE o.OrderStatus = 'Invoiced' AND cn.CreditnoteStatus = 'OK'
Det kan da godt være du skal være mere specifik mht. navngivning af kolonnerne i resultatet, da der er flere forskellige udgaver af ID og CustomerID. Alternativt kun udvælge specifikke kolonner fra de forskellige tabeller...
Ja så langt så godt, men hvordan udskriver jeg så f.eks. Clients ID ? Hvis jeg bare skriver rs("ID") så får jeg: Item cannot be found in the collection corresponding to the requested name or ordinal.
Hmm kan sgu ikke helt gennemskue what to do. Jeg skal jo bruge en liste, som kun henter de Clients ud, hvor der er en Ordre og så liste alle Ordrer og CreditNotes udfor hver kunde...
Hvis du har samme navngivning og alle skal være inkluderet i din sql, og du vil have fat i disse ved at kalde på dem, så bliver du vel også nødt til at give de forskellige id'er et alias.
Hvis man går ud fra den her:
SELECT c.*, o.*, cn.* FROM (clients c INNER JOIN orders o ON o.CustomerID = c.id) INNER JOIN creditnotes cn ON cn.CustomerID = c.id WHERE o.OrderStatus = 'Invoiced' AND cn.CreditnoteStatus = 'OK'
så:
SELECT c.ID AS cid,c.name,o.ID AS oid, o.*,cn.ID AS cnid, cn.* FROM ....
Enten skal du omdøbe dine felter i db så de ikke har samme navngivning over det hele, ellers bliver du jo vel nødt til at lave en helvedes lang alias liste i din select.
Den med at udskrive felterne er klaret - det var faktisk ikke så svært: Hvis navnet på feltet kun findes i én tabel, så bruges rs("feltnavn"). Hvis navnet på feltet er lig med et feltnavn i en anden tabel, så bruges rs("tabel.feltnavn")
sql="SELECT c.*, o.*, cn.* FROM Clients,Orders,CreditNotes WHERE Clients.ID = CustomerID AND Clients.ID = CreditNotes.CustomerID" set rs=Conn.execute(sql)
do while not rs.eof response.write rs("name") & "<br />" & rs("Orders.OrderNo") & "<br />" & rs("CreditNotes.CreditnoteNo") rs.movenext loop
ups, mente self "SELECT * FROM Clients,Orders,CreditNotes"
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.