Avatar billede bernhof Nybegynder
24. september 2003 - 15:41 Der er 10 kommentarer og
2 løsninger

SQL: Select statement i Select statement

Jeg har to tabeller i min Access database: "tblCat" og "tblPost".

I tblPost har jeg et felt, jeg kalder post_cat, hvis værdi er en reference til en bestemt row i tblCat, hvor feltet cat_id har samme værdi. Desuden har jeg i tblCat et felt ved navn cat_title, som indholder noget tekst.

Hvordan kan jeg sortere et recordset ud fra cat_title, når jeg tager udgangspunkt i tblPost?

Jeg ville regne med noget lignende dette:

SELECT post_id, (SELECT tblCat.cat_title WHERE tblCat.cat_id = post_id) AS cat_title
FROM tblPost
ORDER BY cat_title, post_id

Men den siger "no value given for one or more required parameters". Jeg ved det kan lade sig gøre at placere et Select-statement inde i et andet Select-statement, men jeg har tydeligvis ikke styr på hvordan dette gøres.

Er der nogen der kan hjælpe mig?
Avatar billede netro Nybegynder
24. september 2003 - 15:46 #1
Select tblPost.post_id, tblCat.cat_title From tblPost Left Join tblCat On tblPost.post_id = tblCat.cat_id Order By tblCat.cat_title, tblPost.post_id
Avatar billede dawin_dk Nybegynder
24. september 2003 - 15:47 #2
du kan ikke kalde ud ... du kan derfor ikke sætte post_id ind i den .. det du har i din sub-select bliver kørt før den behandler den udenom ...

det du skal gøre er at joine dem ...

SELECT tblpost.post_id,tblcat.cat_title FROM tblPost inner join tblcat on tblCat.feldjoin = tblCat.feldjoin ORDER BY cat_title, post_id

.. husk lige at erstatter
tblCat.feldjoin = tblCat.feldjoin  med de 2 felter som der er lig hinanden (det de joines på )...

/david
Avatar billede bernhof Nybegynder
24. september 2003 - 16:50 #3
Ok, de virker begge! Tak for hjælpen ..

Lige inden jeg giver point:
1) dawin_dk - placer et svar så du kan få din del af poitene
2) Hvad er forskellen på Inner og Left Join? Findes Right Join også?
Avatar billede netro Nybegynder
24. september 2003 - 16:55 #4
Left Join tager alle poster fra tabel A, uanset om de har et match i tabel B.
Right Join tager alle poster fra tabel B, uanset om de har et match i tabel A.
Inner Join tager kun de poster fra tabel A, der har et match i tabel B.
Avatar billede dawin_dk Nybegynder
24. september 2003 - 16:58 #5
et svar :)
Avatar billede dawin_dk Nybegynder
24. september 2003 - 16:58 #6
men ser lige netro er først.. giv ham point ... han fortjener dem :))
Avatar billede bernhof Nybegynder
24. september 2003 - 17:06 #7
Du var vel igang med at svare, da netro svarede (der er en ret lille tidsforksel mellem jeres svar) -- altså var du ikke klar over der allerede var svaret, og desuden kan jeg godt lide, at folk giver lidt forklaring til deres svar. Men hvis du insisterer på, at jeg skal give dem til netro, så gør jeg det. Nu snakker vi selvfølgelig kun om 15 point, men alligevel :)

Men hvad mht. Inner og Left Join?
Avatar billede netro Nybegynder
24. september 2003 - 17:13 #8
Del du bare de 30 points mellem os. Mit svar tog ikke så lang tid at skrive.

Ja, hvad mht. Inner og Left Join?
Avatar billede bernhof Nybegynder
24. september 2003 - 17:14 #9
hovsa - havde ikke lige set netro's post :)
Jeg takker!
Avatar billede bernhof Nybegynder
24. september 2003 - 17:15 #10
(jeg havde ikke set dit svar vedr. Join :)
Avatar billede dawin_dk Nybegynder
24. september 2003 - 17:15 #11
der er også outer join ... og i kan jo så nok gætte hvilken funktion den har :)
Avatar billede netro Nybegynder
24. september 2003 - 17:22 #12
Left/Right/Full Natural
Union/Intersect/Except

Der er masser af muligheder for at udtrække data.
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
Kurser inden for grundlæggende programmering

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