Avatar billede nzc Nybegynder
06. december 2002 - 23:04 Der er 8 kommentarer og
1 løsning

et join over 4 tabeller hvori kun de 3 indgår

Hej!

ye subj lyder mærkeligt og det synes jeg oz mig spørgsmål er for jeg ka simpelthen ikke finde ud af det :/

Jeg har 4 tabeller:

create table eksemplartype (
    eksemplartypeID int not null,
    titel varChar(1000) not null,
    udgivelsesaar smallint not null,
    udlejningspris float(2),
    bemaerkninger varChar(1000),
    genre varChar(1000) not null,
    indkoebspris float(2) not null,
    constraint typeIDPK primary key (eksemplartypeID)
    );

create table eksemplar (
    eksemplarID varChar(13) not null,
    stand smallint default 1,
    dato Char(20) not null,
    erUdlejet smallint default 0,
    kanUdlejes smallint default 1,
    eksemplartypeID int not null,
    constraint eksIDPK primary key (eksemplarID),
    constraint eksTypeIDFK foreign key (eksemplartypeID) references eksemplartype
    );

create table udlejningsspil (
    udlejningsspilID int not null,
    konsol varChar(1000) not null,
    producent varChar(1000) not null,
    constraint udlejningsspilIDPK primary key (udlejningsspilID),
    constraint udlejningsspilIDFK foreign key (udlejningsspilID) references eksemplartype
    );

create table udlejningsfilm (
    udlejningsfilmID int not null,
    instruktoer varChar(1000) not null,
    hovedrolleindehaver varChar(1000) not null,
    constraint udlejningsfilmIDPK primary key (udlejningsfilmID),
    constraint udlejningsfilmIDFK foreign key (udlejningsfilmID) references eksemplartype
    );

Mit problem er at jeg vil finde et udlejningsspil eller en udlejningsfilm ud fra eksemplarID. Dvs. jeg ska joine tabellerne
where eksemplarID = "et eller andet ID" AND
eksemplartype.eksemplartypeID = eksemplar.eksemplartypeID
AND ... og det er her jeg står af. For jeg skal joine over enten udlejningsspil eller udlejningsfilm. Hvis udlejningsspilID = eksemplar.eksemplartypeID så skal jeg joine over udlejningsspil hvis ikke så over film.

MEN HVORDAN ?!

Håber i kan hjælpe :)

Hvis i mangler mere information så sig det endelig :)

På forhånd tak
Avatar billede erikjacobsen Ekspert
06. december 2002 - 23:12 #1
Hvorfor skal det være i én SQL-sætning?
Avatar billede nzc Nybegynder
06. december 2002 - 23:30 #2
fordi jeg skal have alle data ud på en gang så jeg har det i ET ResultSet. Dataene fra tabellerne skal bruge til at oprette et objekt af type eksemplartype. Jeg programmerer i Java og databasen er en Interbase.


Hjælper det ?!
Avatar billede erikjacobsen Ekspert
06. december 2002 - 23:49 #3
Du skal have et par objekter, ja, men der er vel fortsat ingen grund til
at gøre det i én SQL? Den klasse du har lavet til at aflevere dig
objektet/rne kan jo "skjule" det for dig.
Avatar billede nzc Nybegynder
07. december 2002 - 00:05 #4
hva mener du med skjule ?

ja det jeg skal bruge er et eksemplar-objekt som skal bruges når jeg opretter eksemplartype-objektet

eksemplar e = new eksemplar(rs.get.......);

eksemplartype et = new eksemplartype(rs.get...., e);

men jeg skal jo stadig joine over 3 tabeller, eksemplar og eksemplartype og udlejningsfilm eller -spil.

hvis du har et forslag erikjacobsen må du gerne komme med det :)

og tak for kommentar :)

NZC
Avatar billede erikjacobsen Ekspert
07. december 2002 - 00:24 #5
Hvis det er den eneste måde du vil oprette fx et eksemplartype-objekt
på er du jo nødt til at slå film og spil sammen til samme tabel.
To af felterne gælder for spil og de andre to er NULL, og omvendt for
film. Så kan det lade sig gøre at give et resultset med i constructoren,

Men "normalt" vil man hente et eksemplartype-objekt med en
hentEksemplarType(int nummer) så brugeren af denne ikke skal vide
noget om den underliggende database-realisering. Og det giver dig
mulighed for at det nødvendige antal SQL-kald
Avatar billede nzc Nybegynder
07. december 2002 - 08:31 #6
Du siger
"Men "normalt" vil man hente et eksemplartype-objekt med en
hentEksemplarType(int nummer) så brugeren af denne ikke skal vide
noget om den underliggende database-realisering. Og det giver dig
mulighed for at det nødvendige antal SQL-kald"

Det jeg ska lave er en hentEksemplarType(int nummer) :) Det lyder til du ved hvordan man "normalt" gør det?

håber du gør :)
Avatar billede nzc Nybegynder
10. december 2002 - 22:24 #7
fandt ud af det selv :)
Avatar billede erikjacobsen Ekspert
10. december 2002 - 22:35 #8
Hovsa - jeg overså din sidste kommentar. Men det er
lidt omstændeligt at begynde at forklare her. Grundlæggende
er det et forsøg på at give forskellige moduler i systemet
hver deres ansvar, så systemet til sidst ikke ligner en
klassisk og hæslig ASP-side :)
Avatar billede nzc Nybegynder
11. december 2002 - 07:02 #9
Det er i orden :)

Jeg ka fortælle at jeg har fordelt funktionen ud i flere dele for at få tingene til at lykkes. Min ide med at lave et kæmpejoin var ikke så god som først antaget :)

NZC
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