Avatar billede pfm Nybegynder
29. februar 2000 - 11:38 Der 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)
Avatar billede lange Nybegynder
29. februar 2000 - 11:53 #1
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
Avatar billede pfm Nybegynder
29. februar 2000 - 12:15 #2
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>
Avatar billede lange Nybegynder
29. februar 2000 - 12:24 #3
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
Avatar billede pfm Nybegynder
29. februar 2000 - 12:32 #4
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!

Avatar billede lange Nybegynder
29. februar 2000 - 12:35 #5
mmkay... prøv:

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


Avatar billede pfm Nybegynder
29. februar 2000 - 14:09 #6
ØØ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.
Avatar billede pfm Nybegynder
29. februar 2000 - 14:14 #7
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 !
Avatar billede pfm Nybegynder
29. februar 2000 - 14:21 #8
damn, der var jeg for hurtig.... Det så rigtigt ud først, men jeg kan nu se at jeg får listet alle igen !!!

HJÆÆÆÆLP !
Avatar billede lange Nybegynder
29. februar 2000 - 14:38 #9
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.
Avatar billede pfm Nybegynder
29. februar 2000 - 15:05 #10
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 !
Avatar billede lange Nybegynder
29. februar 2000 - 15:13 #11
Count returnerer antallet af poster, fx vil SELECT Count(*) FROM Bruger WHERE Navn="Ib" give antallet af brugere med navnet Ib.

Giver "select * from datoer where date>=GetDate()" andre datoer, end dem, du skal se data for?

Avatar billede pfm Nybegynder
29. februar 2000 - 15:22 #12
Nope - Det virker OK!
Men se nu her - Kan det virkelig være rigtigt at dette kan udføre så simpelt ?

select
  distinct s.name
from
  steder s,
  datoer d
where
  s.placeid=d.placeid and d.date>='" today & "'"
?????

Det ser rigtigt ud med data'ne må lige teste det ydereligere !
Avatar billede lange Nybegynder
29. februar 2000 - 15:40 #13
Doh! Nu føler jeg mig en anelse dum, men ja, det må give det rigtige... :)
Avatar billede pfm Nybegynder
29. februar 2000 - 15:46 #14
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!
Avatar billede lange Nybegynder
29. februar 2000 - 16:01 #15
Hehe, narj ikke helt let :)

Min beskrivelse af Distinct må være noget lig "The DISTINCT keyword eliminates duplicate rows from a result set" ... eller osse var det Microsofts ;)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester