Avatar billede esquimal Nybegynder
02. august 2000 - 21:27 Der er 26 kommentarer og
1 løsning

Joine en tabel

Jeg har en tabel med felterne:
ID, Navn, Adresse, By og vil godt have fjernet alle de felter hvor adresse og by går igen. Altså den må ikke fjerne dem hvis adresse = adresse og by <> by. Er det ikke muligt ved at joine tabellen med sig selv?
Hvordan skal SQL sætningen i så fald se ud?
Avatar billede esquimal Nybegynder
02. august 2000 - 22:26 #1
Burde dette ikke virke eller er det helt hen i skoven??

SELECT A.*
FROM Adresseliste AS A INNER JOIN Adresseliste AS B ON A.Id=B.Id
WHERE \"A.Adresse,A.By\"=\"DISTINCT B.Adresse, B.By\";
Avatar billede cktarget Nybegynder
02. august 2000 - 23:25 #2
esquimal: et ummidelbart gaet ville vaere at det var hen iskoven.
Ihvertfal hvis det er SQL du skriver.

SELECT A.*
FROM Adresseliste A, Adresseliste B
WHERE A.adresse<>B.adresse AND A.by<>B.by;

MVH Kedde
Avatar billede esquimal Nybegynder
02. august 2000 - 23:31 #3
Det virker ikke. Den giver jo bare en masse dobbelt records?
Avatar billede cktarget Nybegynder
02. august 2000 - 23:33 #4
har du siddet og efterproevet, for jeg mener da bstemt at det burde virke
Avatar billede esquimal Nybegynder
02. august 2000 - 23:35 #5
Ja jeg har lige prøvet den. Den giver næsten lige så mange som hvis jeg bare joiner dem uden betingelser
Avatar billede cktarget Nybegynder
02. august 2000 - 23:35 #6
okay, der kommer lige en rettelse

SELECT A.*
FROM Adresseliste A, Adresseliste B
WHERE A.adresse<>B.adresse AND A.by<>B.by AND A.ID=B.ID AND A.Navn=B.Navn;
Avatar billede esquimal Nybegynder
02. august 2000 - 23:38 #7
Den giver slet ingen.

Avatar billede esquimal Nybegynder
02. august 2000 - 23:39 #8
Jeg har prøvet en masse kombinationer der minder om dem der, enten for jeg flere, ingen eller alle records
Avatar billede cktarget Nybegynder
02. august 2000 - 23:41 #9
jeg har desvaerre ikke adgang til en base her hvor jeg kan proeve det, lad mig lige taenke over det inat.

mvh kedde
Avatar billede cktarget Nybegynder
02. august 2000 - 23:43 #10
hvilket base program bruger du
Avatar billede esquimal Nybegynder
02. august 2000 - 23:44 #11
access
Avatar billede cktarget Nybegynder
02. august 2000 - 23:45 #12
hvaffor en af felterne er din noegle, hvis eks ID er din noegle saa noeges med at lave denne SQL

SELECT A.*
FROM Adresseliste A, Adresseliste B
WHERE A.adresse<>B.adresse AND A.by<>B.by AND A.ID=B.ID; 
Avatar billede esquimal Nybegynder
02. august 2000 - 23:46 #13
Id er nøglen
Avatar billede cktarget Nybegynder
02. august 2000 - 23:47 #14
Og du er sikker paa at der er tupler, hvor de to felter gaar igen.
Da det er access, du bruger er der ikke ret mange muligheder, i normalt SQL findes der alle de matematiske mgd operationer, men lige noejagtig i access er det lidt begraenset.
Avatar billede esquimal Nybegynder
02. august 2000 - 23:49 #15
Ja der er nogen hvor adresse og by er ens, men navn og ID er selvfølgelig forskellig.
Jeg fatter simpelthen ikke hvorfor det ikke virker.
Det kunne løses ved bare at fjerne dubletterne men nu er det blevet en princip-sag ;O)
Avatar billede cktarget Nybegynder
02. august 2000 - 23:52 #16
ja det kan jeg godt forstaa :o)

proev lige denne forespoergsel

SELECT A.*
FROM Adresseliste A, Adresseliste B
WHERE A.by<>B.by AND A.ID=B.ID
UNION
SELECT A.*
FROM Adresseliste A;

Jeg er slet ikke sikker paa at den virker, mend et kunne da vaere sjovt hvis det gjorde.

mvh kedde
Avatar billede esquimal Nybegynder
02. august 2000 - 23:55 #17
Desværre ikke. Jeg får alle records
Men mangler der ikke også adresse et sted
jeg prøvede med:
SELECT A.*
FROM Adresseliste A, Adresseliste B
WHERE A.Adresse <> B.Adresse AND A.by<>B.by AND A.ID=B.ID
UNION
SELECT A.*
FROM Adresseliste A;

Med samme resultat
Avatar billede cktarget Nybegynder
02. august 2000 - 23:56 #18
det var den du skrev jeg ville have proevet, korekt. Men jeg er ogsaa kommet itanke om at det ikke ville virke.

Jeg beklager.
Avatar billede esquimal Nybegynder
02. august 2000 - 23:58 #19
ok, damn!
Avatar billede cktarget Nybegynder
03. august 2000 - 00:01 #20
Vi proever nu en helt ny starategi ;)

SELECT A.*
FROM Adresseliste A
WHERE A.* IN (SELECT B.*
    A.ID = B.ID AND
    A.Adresse <> B.Adresse AND
    A.By <> B.By
);

mvh kedde
Avatar billede esquimal Nybegynder
03. august 2000 - 00:03 #21
Det vil den sgu ikke være med til, der er syntax fejl i.
Avatar billede cktarget Nybegynder
03. august 2000 - 00:05 #22
Ja selv. er der det. Du skal skrive  foelgende

SELECT A.*
FROM Adresseliste A
WHERE A.* IN (SELECT B.*
          FROM Adresseiste B
          WHERE A.ID = B.ID AND
              A.Adresse <> B.Adresse AND
              A.By <> B.By
);

Endnu engang ingen garanti, for at lortet virker

Avatar billede esquimal Nybegynder
03. august 2000 - 00:08 #23
Den siger stadig syntax fejl. Starter ved:
WHERE A.*
Eller også er den bare forvirret
Avatar billede cktarget Nybegynder
03. august 2000 - 00:09 #24
Evt. kan du lige som det absoulut sidste proeve dette her, hvis det ikke virker, har jeg ikke paa staende fod nogle ideer.


SELECT A.*
FROM Adresseliste A, Adresseliste B
WHERE ((A.adresse<>B.adresse AND A.by<>B.by) OR (A.adresse=B.adresse AND A.by<>B.by) OR (A.adresse<>B.adresse AND A.by=B.by)) AND A.ID=B.ID AND A.Navn=B.Navn; 
Avatar billede cktarget Nybegynder
03. august 2000 - 00:10 #25
det er jeg ogsaa :o) (forvirret)
Avatar billede esquimal Nybegynder
03. august 2000 - 00:11 #26
det er du ikke ene om.
Jeg troede det var lige til i første omgang
hmmm.....det hjælper nok at sove lidt på det for anden gang ;O)
Avatar billede esquimal Nybegynder
03. august 2000 - 09:00 #27
Hov jeg var vidst lidt træt i går, det var ikke lige meningen den skulle have været accepteret
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
Computerworld tilbyder specialiserede kurser i database-management

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