Avatar billede dannv Nybegynder
13. marts 2004 - 14:16 Der er 9 kommentarer og
1 løsning

Join mellem to tabeller, hvor ikke alle data har en reference.

jeg skal joine fra to tabeller, men har et problem, med at nogle data bliver udeladt....

tabel 1: compound (id(PK), cd_id, chemcial_name....etc)
tabel 2: structures (cd_id(PK), cd_formula, cd_molweight...etc)

jeg har forsøgt følgende.:
--------------------
SELECT c.id, c.chemical_name, c.cas_number, c.density, c.register_date, c.register_by, s.cd_formula, s.cd_molweight
FROM compound c, structures s
WHERE c.cd_id = s.cd_id
AND c.chemical_name like '%test%'
--------------------

compound har feltet cd_id som er link til data i structures som har primary key cd_id.

Men nogle af mine data i compound har værdien 0 i cd_id i compound tabellen, hvilket vil sige at de ikke har en structure tilknyttet. ovenstående sql giver mig så alle de data som ikke har c.cd_id = 0. (samt har chemcial_name like test!)

Men jeg vil naturligvis også have vist de data fra compound som 'chemical_name like test' og har cd_id = 0........!

hvordan...??
Avatar billede lillebror Nybegynder
13. marts 2004 - 14:41 #1
SELECT c.id, c.chemical_name, c.cas_number, c.density, c.register_date, c.register_by, s.cd_formula, s.cd_molweight
FROM compound c, structures s
WHERE (c.cd_id = s.cd_id OR c.cd_id = 0)
AND c.chemical_name like '%test%'
Avatar billede dannv Nybegynder
13. marts 2004 - 15:08 #2
Virker ikke, returnerer alle rækker... (alle rækker har jo enten en værdi i cd_id eller også er værdien 0, så ovenstående vil altid returnere alle rækker.).
Avatar billede arne_v Ekspert
13. marts 2004 - 15:14 #3
Prøv:

SELECT c.id, c.chemical_name, c.cas_number, c.density, c.register_date, c.register_by, s.cd_formula, s.cd_molweight
FROM compound c LEFT JOIN structures s
ON c.cd_id = s.cd_id
WHERE c.chemical_name like '%test%'
Avatar billede dannv Nybegynder
13. marts 2004 - 15:15 #4
faktisk returnerer den 6440 det er de samme data ganget op mange mange gange....
Avatar billede dannv Nybegynder
13. marts 2004 - 15:24 #5
arne, det ser ud til at være ok, kan du komme med en forklaring så jeg selv kan forstå hvad det er der foregår...??
Avatar billede dannv Nybegynder
13. marts 2004 - 15:26 #6
og svar for point!
Avatar billede arne_v Ekspert
13. marts 2004 - 15:33 #7
svar
Avatar billede arne_v Ekspert
13. marts 2004 - 15:34 #8
LEFT JOIN betyder: tag alle records på venstre side, hvis der er en record på højre
side som opfylder betingelsen så lig den ved siden af, hvis ikke så lad være
Avatar billede dannv Nybegynder
13. marts 2004 - 15:42 #9
Jeg er ikke sikker på at jeg helt forstår.....

Hvordan skal records på højre og venstre side forståes, til højre eller venstre for hvad?
Avatar billede arne_v Ekspert
13. marts 2004 - 16:01 #10
records i den tabel der er angivet henholdsvis til venstre og til højre for
"LEFT JOIN".
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