Avatar billede webb Nybegynder
08. november 2000 - 12:28 Der er 20 kommentarer og
2 løsninger

HASTER ! Simpel forspørgsel...

Jeg har et åndsvagt prob, jeg vil lave en forspørgsel på det jeg ikke vil ha...argh

eks :

SELECT Tabel1.Adresse, Tabel1.By
FROM Tabel1, Tabel2
WHERE Tabel1.by=Tabel2.by

Giver mig alle adresser i tabel1 hvor byen
matcher med en by i tabel2.

Fint, men jeg vil alle dem som ikke matchede.

Jeg har prøvet med tabel1.by<>tabel2.by men det alt for meget output
(antal ikke match^antal felter i anden tabel)

Help me !!!
Avatar billede ldanielsen Nybegynder
08. november 2000 - 12:35 #1
enten
SELECT Tabel1.Adresse, Tabel1.By
FROM Tabel1 LEFT OUTER JOIN Tabel2
ON Tabel1.by=Tabel2.by

eller:
SELECT Tabel1.Adresse, Tabel1.By
FROM Tabel1 RIGHT OUTER JOIN Tabel2
ON Tabel1.by=Tabel2.by

Jeg kan aldrig helt finde ud af hvordan det skal vende
Avatar billede webb Nybegynder
08. november 2000 - 13:54 #2
Hmmm jeg får stadig for mange poster !

Tabel1        | Tabel2
Adresse  By    | Adresse  By
--------+------|---------+-----
adr1    |køge  |adr1    |køge
adr2    |køge  |adr1    |ishøj
adr1    |ishøj |adr2    |ishøj
adr1    |husum |adr3    |ishøj

Hvis jeg sammenligner med = får jeg jo alle der
matcher i tabel1, altså : køge,køge,ishøj

Men jeh vil gerne vide dem som ikke matcher og
jeg vil ikke ha resultatet dupleret som man får det hvis man bruger <>

Avatar billede webb Nybegynder
08. november 2000 - 13:58 #3
Ups glemte at tilføje at i mit eks. er det \"husum\" som ikke findes i Tabel2 og den burde være mit resultat..

Jeg øger gerne med point og til \"Idanielsen\" jeg har ikke afvist dit svar endnu...må teste videre

Avatar billede kasseper Nybegynder
08. november 2000 - 14:48 #4
SELECT Table1.adresse, Tabel1.by
FROM Table1, Table2
WHERE NOT EXISTS
  (SELECT Table1.by
  FROM Table1, Table2
  WHERE Table1.by = Table2.by)

Skulle kunne gøre det.....
Avatar billede kasseper Nybegynder
08. november 2000 - 14:52 #5
næhhh hov prøver igen :

SELECT adresse, by
FROM Table1 T1
WHERE NOT EXISTS
  (SELECT *
  FROM Table2 T2
  WHERE T2.by = T1.by)



Avatar billede dreadnought Nybegynder
08. november 2000 - 14:54 #6
Det her virker i MySQL:

SELECT DISTINCT(Tabel1.Adresse),Tabel1.By FROM Tabel1,Tabel2 WHERE Tabel1.by <> Tabel2.by
Avatar billede lkp Nybegynder
08. november 2000 - 15:00 #7
Hej webb

Du kan burge NOT EXISTS

Hvis du ønsker at få alle de byer i tabel1 der ikke eksisterer i tabel2, skal du bruge flg. SQL sætning:

SELECT Tabel1.By
FROM Tabel1
WHERE NOT EXISTS  (SELECT Tabel2.By
FROM Tabel2
WHERE By = Tabel1.By)

Hvis du ydermere vil have de byer i tabel2 der ikke eksisterer i tabel1, sammen med ovenstående, \"vender du ovenstående om, og forener dem:

SELECT Tabel1.By
FROM Tabel1
WHERE NOT EXISTS  (SELECT Tabel2.By
FROM Tabel2
WHERE By = Tabel1.By)
UNION SELECT Tabel2.By
FROM Tabel2
WHERE NOT EXISTS (SELECT Tabel1.By
FROM Tabel1
WHERE By = Tabel2.By);

Håber du kan bruge ovenstående, ellers skriv igen.

Med venlig hilsen

LKP
Avatar billede kasseper Nybegynder
08. november 2000 - 15:00 #8
Joohhh dreadnought, men du laver stadig det cartesiske (eller sådan noget) produkt, hvilke er en gevaldig rescource krævende funktion. Du henter mange mange data ind for derefter at smidet 99 % af dem væk (afhængigt af tabellernes størelse)....Det er smartere at finde sammeligne fra den ene tabel overmod den anden, med NOT EXISTS......
Avatar billede kasseper Nybegynder
08. november 2000 - 15:01 #9
LKP >> for sent, hehehehehe
Avatar billede lkp Nybegynder
08. november 2000 - 15:04 #10
Kasseper >> Ja... Jeg må reloade noget mere.

Men du får kun den ene side med, ikke manglende byer fra begge tabeller.

Med venlig hilsen

LKP
Avatar billede kasseper Nybegynder
08. november 2000 - 15:07 #11
næhh, men jeg får heller ikke de byer der ligger syd for Barcelona med, det var jo faktisk ikke det der var spg.!!!;-)
Avatar billede webb Nybegynder
08. november 2000 - 15:16 #12
OG resultatet blev :

SELECT FDBTOT.Adresse , FDBTOT.By
FROM FDBTOT WHERE NOT EXISTS (
SELECT  [ADSL udrulning].centralområde
FROM [ADSL udrulning]
WHERE centralområde=FDBTOT.by);

og en lykkelig mand fra Tele Danmark
Avatar billede webb Nybegynder
08. november 2000 - 15:17 #13
Men damn hvor er den langsom !!!
Avatar billede lkp Nybegynder
08. november 2000 - 15:24 #14
Hej WEB

Tak for de mange point.

Sådan som du har anvendt forespørgslen, bruger du kun den ene vej, og så må jeg jo sige, at Kasseper havde ret i, at UNION delen af mit svar ikke var nødvendig (Selvom jeg var troede det.)

Såeh Kasseper, sig lige til hvis du mener at jeg  uretmæssigt har spist nogle af dine point.

Med venlig hilsen

LKP
Avatar billede moses Praktikant
08. november 2000 - 15:24 #15
Sådan får man listen fra tabel1 af dem, som ikke er i tabel2:

SELECT Tabel1.Felt1, Tabel1.Felt2
FROM Tabel2 LEFT JOIN [Tabel2] ON Tabel1.Felt1 = Tabel2.Felt1
WHERE (((Tabel2.Felt1) Is Null))
GROUP BY Tabel1.Felt1, Tabel1.Felt2;
Avatar billede moses Praktikant
08. november 2000 - 15:27 #16
Jeg er ved at blive gammel. Jeg skulle bare lige ud en gang og så var der allerede svaret - op til flere gange.

Jeg kendte iøvrigt ikke den med WHERE NOT EXIST !!

Avatar billede kasseper Nybegynder
08. november 2000 - 15:27 #17
Jamen så syntes jeg egentlig det !!!!
Ikke fordi jeg tvivler på din ærlighed, men jeg havde jo givet svaret > 7 min før dit indlæg.....
Så måske kan vi finde en mere retfærdig deling.....

Kasseper
Avatar billede lkp Nybegynder
08. november 2000 - 15:35 #18
Hej Kasseper

Selvfølgelig kan vi da det.

Se: http://www.eksperten.dk/spm/32477

Med venlig hilsen

LKP
Avatar billede webb Nybegynder
08. november 2000 - 15:35 #19
Ja jeg har givet pointene, så mere kan jeg ikke gøre, men til moses, jeg vil gerne afprøve din metode af ! Da jeg stadig synes at det går røvsygt langsomt, men det er jo kun en access database, jeg kan bedre li MS SQL...
Avatar billede moses Praktikant
08. november 2000 - 15:49 #20
Hov hov du - Acces er skam udemærket !!

Ja - du har bemærket forskllen i min og de andres løsning !!!
Med hensyn til min løsning og den med NOT EXISTS, så er de ikke helt ens !!
Der bliver i de andres løsning kørt en SELECT for hver eneste record i den primære tabel.
Min løsning henter de to tabeller én gang og kører så querien.

MULTI FASTER
Avatar billede webb Nybegynder
10. november 2000 - 11:29 #21
ok ok ok :)

Det var bare min frustration at køre forspørgslen
på en Pentium 166 med ca 1300 records i begge tabeller.

Sorry Moses, jeg har sgu ikke flere point at gi væk i denne hastesag...

Tak for hjælpen Drenge..
Avatar billede moses Praktikant
13. november 2000 - 09:01 #22
Derfor må du alligevel gerne bruge min løsning.

Jeg kørte den på en database, med over 1600 records i begge tabeller. Det sagde bare snap - og så var den der !!
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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