Avatar billede tgv Nybegynder
22. august 2007 - 12:03 Der er 5 kommentarer og
1 løsning

Nestede SQL subquerys

Jeg har lavet en SQL subquery som har en tabel af aftaler med ID numre og navn etc. Ud over dette har jeg en tabel med Aftale-ID og Virksomheds-ID (dvs. en junction tabel der viser forholdet mellem aftaler og virksomheder). Til sidst er der en tabel med Virksomhederne i, hvor deres ID, navn osv er.

$sqlmaks="SELECT * from Aftale WHERE ID IN (SELECT [Aftale-ID] FROM [Aftale Virksomhed Junction] WHERE [Virksomheds-ID] IN (SELECT ID FROM Virksomhed WHERE ID=$Vnavn))";

Jeg har til dette oprettet en SQL query. Den er nemmeste at forstå bagfra. /SELECT ID FROM Virksomhed WHERE ID=$Vnavn/ returnerer en kolonne med alle de virksomheder som brugeren har søgt efter vha. ID nummer.

/SELECT [Aftale-ID] FROM [Aftale Virksomhed Junction] WHERE [Virksomheds-ID] IN/

Denne der i den forrige returnerde kolonne og finder de Aftale-ID som den søgte virksomhed har. (DVS. aftalerne for de virksomheder der er i første returnede kolonne)

/SELECT * from Aftale WHERE ID IN/

Sidste(eller første :)) statement vælger alle kolonner i tabellen aftale der har et ID nummer som passede med de andre subquerys.


--- Nu til selve spørgsmålet:

Jeg vil gerne kunne søge efter andet end blot ID i sidste statement.

SELECT ID FROM Virksomhed WHERE ID=$Vnavn

Altså i stedet for kun at tage de virksomheder hvor ID passer, så vil jeg gerne også kunne formindske denne tabel mere vha. f.eks. LIKE så man kan søge efter virksomhedsnavn.

Dette giver dog SQL error. Jeg forstår bare ikke hvorfor jeg ikke kan få lov til at indesnævre denne tabel! Har læst lidt om at det er fordi den returnere for mange rows så??

Hvad jeg kan gøre? På forhånd tak :)
Avatar billede tgv Nybegynder
22. august 2007 - 12:05 #1
Håber det er til at forstå, er svært at beskrive :)
Avatar billede sw_red_6 Nybegynder
22. august 2007 - 12:22 #2
hvordan prøvede du at løse det?

Som jeg forstår det vil du lave det her:
SELECT ID FROM Virksomhed WHERE ID=$Vnavn
om til noget som det her:
SELECT ID FROM Virksomhed WHERE ID=$Vnavn AND NAVN LIKE '%$virksomhedens_navn%'
Avatar billede tgv Nybegynder
22. august 2007 - 12:39 #3
Yep, det jeg har prøvet, men så bliver jeg nødt til at selected både ID,NAVN fra virksomhed. Og det vil den ikke være med til!
Avatar billede tgv Nybegynder
22. august 2007 - 12:43 #4
Det var sgu utroligt, troede man behøvede at selecte alle koloknner for at kunne bruge dem i sammenligningsgrundlag, men åbentbart ikke der, dit forslag virkede fint... Bare mærkeligt man kan skrive, for at bruge dit, NAVN like blabla, når NAVN ikke er selected! :)

Men hvis du vil have point så smid et svar, selvom de var nemme :)
Avatar billede sw_red_6 Nybegynder
22. august 2007 - 13:41 #5
hehe..
Det er ikke nødvendigt at hente data for at lave en condition på den, de to ting har som sådan intet med hinanden at gøre

Jeg synes du skal tage ½-delen af pointene selv, som du selv siger så var det nemme point
Avatar billede tgv Nybegynder
22. august 2007 - 16:00 #6
Så har jeg da trykket accepter, håber du får point, eller checker jeg lige igen :D
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