Avatar billede henriklaursen Nybegynder
18. maj 2004 - 15:03 Der er 7 kommentarer

Select fra 2 tabeller where

Hej..
Jeg har et system hvor brugere kan sende breve til hinanden.
Til dette bliver der brugt 2 tabeller - "User" og "Letter".

Problemet er, at der er nogle brugere der har slettet der bruger login (altså findes de ikke i "User" mere). Men jeg har desværre glemt at slette de breve som de have i deres indbakke/udbakke.

Dette skal jeg nu have lavet.

I tabellen "Letter" er der en "Tilbruger" og en "Frabruger".
i tabellen "User" har alle et unikt id kaldet "ID"

Det som skal selectes er hvor
- tilbruger og frabruger ikke findes i dateuser


men jeg kan ikke rigtigt få min sql sætning til at makke ret.
det som jeg har lavet indtil nu ser således ud

select distinct dateletter.id as sletid, dateletter.tilbruger, dateletter.frabruger from dateletter, dateuser where ((dateletter.tilbruger <> dateuser.id) and (dateletter.frabruger <> dateuser.id))

men den tager åbenbart ikke hensyn til where sætningen

er der nogle som kan hjælpe..
Avatar billede chries Nybegynder
18. maj 2004 - 15:05 #1
brug left join

You want to select all rows from table1 which don't exist in table 2?
Example:
table1.id = list(1, 2, 3, 4, 5)
table2.id = list(1, 2, 5)
You want to have 3 and 4 as the result cause they are not in table 2?
Use the OUTER JOIN:
SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id WHERE table2.id IS NULL
Avatar billede chries Nybegynder
18. maj 2004 - 15:10 #2
SELECT dateletter.* FROM dateletter LEFT JOIN dateuser ON dateletter.tilbruger=dateuser.id WHERE dateuser.id IS NULL

SELECT dateletter.* FROM dateletter LEFT JOIN dateuser ON dateletter.frabruger =dateuser.id WHERE dateuser.id IS NULL
Avatar billede henriklaursen Nybegynder
18. maj 2004 - 15:14 #3
jeps.. den virker næsten..
problemet er bare, at den ikke kontrollere i begge felter første gang.
dvs. at den selecter kun både "tilbruger" og "frabruger" ikke findes i "dateuser".

kan man på nogen måde få den til at "joine" på begge felter ?
Avatar billede henriklaursen Nybegynder
18. maj 2004 - 15:15 #4
arghh.. mig og mine stavefejl.. jeg prøver lige igen..

jeps.. den virker næsten..
problemet er bare, at den ikke kontrollere i begge felter første gang.
dvs. den skal kun selecte hvis både "tilbruger" og "frabruger" ikke findes i "dateuser".

kan man på nogen måde få den til at "joine" på begge felter ?
Avatar billede chries Nybegynder
18. maj 2004 - 15:27 #5
Det her er et gæt =)
SELECT dateletter.* FROM dateletter LEFT JOIN dateuser ON dateletter.frabruger=dateuser.id AND dateletter.tilbruger=dateuser.id WHERE dateuser.id IS NULL
Avatar billede henriklaursen Nybegynder
18. maj 2004 - 15:30 #6
nope.. det virker ikke :-) - har også selv haft tanken
Avatar billede henriklaursen Nybegynder
18. maj 2004 - 15:49 #7
jeg fandt selv en løsning..

SELECT
dateletter.id as sletid,
dateletter.tilbruger,
dateletter.frabruger,
dateuser1.id,
dateuser2.id
FROM dateletter
LEFT JOIN dateuser AS dateuser1 ON dateuser1.id = dateletter.tilbruger
LEFT JOIN dateuser AS dateuser2 ON dateuser2.id = dateletter.frabruger
where dateuser1.id IS NULL and dateuser2.id IS NULL
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