29. februar 2000 - 11:38Der er
14 kommentarer og 1 løsning
Den hurtigste/bedste måde at SELECTe fra 2 SQL-tabeler hvis nyere datoer findes!
Det er da svært at kategorisere sværhedsgraden på et spørgsmål man ikke kender svaret på - Er spørgsmålet svært for jer ? Nå, men det her er mit første spørgsmål - så bær over med mig og eventuel give mig indsigt i "ekspertikette"!
Min viden om Queries er lille - Jeg har brug for hjælp til en Select fra en SQL7-table, der relaterer til en table med (måske) (en masse) datoer ! ___________________________________ table1: steder | table2: datoer _________________|_________________ placeid | dateid name | placeid address | date _________________|_________________ Jeg vil gerne have en liste af steder.name, der har datoer fra idag og frem!
Om tabelerne: There could be no dates at all for a placeid ! And I only want to list the placename's for id's with dates ! - and only dates from today and further ! So if a placeid have only dates from yesterday and back I do not want to have them in the list !
Tak til alle jer der gør livet lidt lettere for os andre ! ps. Jeg bruger ASP(VBScript)
Jeg er lidt på dybt vand her, men jeg tror denne SQL-sætning er hvad du leder efter:
select s.name from steder s, datoer d where s.placeid=d.placeid and (select count(*) as antal from datoer where date>=Date() and s.placeid=d.placeid)>0
Der er noget galt ! <p>Microsoft OLE DB Provider for ODBC Drivers</font> <font face="Arial" size=2>error '80040e37'</font> <p> <font face="Arial" size=2>[Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name 'd'.</font> <p>
Ups, prøv den her i stedet (som sagt, jeg er lidt på dybt vand): :)
select s.name from steder s, datoer d where s.placeid=d.placeid and (select count(d.date) as antal from datoer d,steder s where d.date>=Date() and s.placeid=d.placeid)>0
OKEEEEY, nu sker der noget.... Nu listes alle steder, men de listes lige så mange gange der er datoer ! Så hvis der er 19 datoer for et sted i Århus, bliver Århus listet 19 gange!
select distinct s.name from steder s, datoer d where s.placeid=d.placeid and (select count(d.date) as antal from datoer d,steder s where d.date>=Date() and s.placeid=d.placeid)>0
eller
select s.name from steder s, datoer d where s.placeid=d.placeid and (select count(d.date) as antal from datoer d,steder s where d.date>=Date() and s.placeid=d.placeid)>0 group by s.name
ØØvv, Jeg troede lige at den var der - Med lidt modifikationer og med din distinct løsning så det ud til at virke.... Men den lister alligevel et sted som er udgået for datoer ! (Den havde datoer, men er nu udgået)
Jeg har ikke brugt din d.date>=Date().... Det kommer der fejl af, men jeg har brugt en variable today som får værdien date() Jeg kunne vel også have prøvet d.date>='" & Date() & "' ...."
Jeg prøvede også din group by løsning men der kom fejl i forbindelse med group.
Jeg har den !!!!! Jeg slettede s.placeid=d.placeid efter første where...... Tak for hjælpen!!!! Du får pointene nu ! Uden din hjælp var jeg aldrig kommet på det.
- Og nu kan jeg jo se at for eksperter var det ikke så nemt et spørgsmål - Den burde jo nok have været rated noget højere !
Hmm... Date()-funktionen hedder vist GetDate() i stedet for (hvis det er SQL Server 7.0 du bruger).
Men ellers prøv at bryde forespørgslen op i mindre dele. Altså se om fx "select * from datoer where date>=GetDate()" kun giver dig de datoer, du skal bruge.
Altså - udmidelbart ser det jo rigtigt ud når man kigger på koden.... Jeg har aldrig brugt distinct før og har kun lidt kendskab til count! Hvordan kan jeg finde ud af hvor mange den har fundet med count ? Som jeg ser det - må den jo nødvendigvis tælle en gammeldato med - Den lister ihvert fald et sted, der kun har én dato - som er for gammel !
Det må have været din distinct s.name der har gjort det for mig for jeg er helt sikker på at jeg har prøvet ovenstående uden distinct før uden rigtigt resultat! Hvad er din beskrivelse af distinct ?
Men tusind tak for hjælpen - Det var måske alligevel et let spørgsmål ;o) TAK!
Min beskrivelse af Distinct må være noget lig "The DISTINCT keyword eliminates duplicate rows from a result set" ... eller osse var det Microsofts ;)
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.