24. februar 2006 - 17:19Der er
7 kommentarer og 1 løsning
SQL problem med fællesmængde
Tabeller: Tid, Reservation
Reservation indeholder: reservationId, produktId, tidId, navn, tlf, email, dato
Tid indeholder: tidId, tidspunkt
Problem:
når jeg vælger en dato fra tabellen Reservation skal den returnere alle de ledige tider fra tabellen Tid. Da hver reservation har en dato og en tidId tilknyttet, vil jeg tro der skal bruges en eller anden join. jeg bruger selv den nedenstående sql, men får de tidspunkter der er reserveret allerede. Jeg vil have de ledige tidspunkter udfra den valgte dato.
"SELECT Tid.tidId, Tid.tidspunkt " + "FROM Tid INNER JOIN Reservation ON Reservation.tidId=Tid.tidId " + "WHERE Reservation.dato=[@dato] AND NOT ISNULL( Reservation.tidId) "
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
på tabellen Reservation har jeg en felt der hedder "dato" og en felt med "tidId". "tidId" er den valgte tidId fra tabellen Tid. Dvs på en reservation vil vi få et tidId og en dato. Sådan som tabellen Reservation er opbygget vil en dato på en reservation kunne indeholde forskellige tidpunkter. Det skal dog ikke være mulig at kunne vælge samme dato med samme tidspunkter. Derfor når jeg vælger en dato fra tabellen Reservation, skal alle de tidId'er, der allerede hænger på datoen ikke returneres. tidId har datatypen (tal)Integer.
"SELECT Tid.tidId, Tid.tidspunkt " + "FROM Tid Left JOIN Reservation ON Reservation.tidId=Tid.tidId " + "WHERE Reservation.dato=[@dato] AND ISNULL( Reservation.tidId) "
hej Niles jeg prøvede din løsning men det hjalp ikke. For jeg får ikke de ledige tider frem. Jeg får ingen resultater ud af det. men når jeg skriver "NOT ISNULL" får jeg de tidId'er der både er i tabellen Reservation og Tid
Hej darkstar
Jeg bruger en access database, jeg prøvede dit eksampel og jeg får også de tidId'er som er i Tid tabellen men ikke i Reservation tabellen. så hertil er det ok. Men det skal kunne finde dem ud fra det valgte date. Og når jeg giver "AND Reservation.dato=@dato" får jeg en fejl i koden der siger at "Der er ikke angivet værdi for en eller flere af de krævede parametre" selvom "@dato" får en værdi.
SELECT * FROM Tid WHERE tidId NOT IN ( SELECT Reservation.tidId FROM Reservation WHERE Reservation.dato=@mindato )
Jeg er ikke klar over hvordan @-konstruktionen virker i Access, men der kan godt være et problem hvis du både har et parameter (@dato) og et felt (dato), som hedder det samme, så prøv det jeg har skrevet ovenfor.
Det er meget muligt at de bliver langsommere når DB'en vokser. Men lige i første omgang skal det bare fungere, også skal jeg se om jeg kan finde en anden løsning til det. Men ellers tak for dine svarer.
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.