Avatar billede eksperten1 Nybegynder
27. oktober 2002 - 21:26 Der er 6 kommentarer og
1 løsning

SUBSELECT eller ?

Jeg bruger en MySQL 3.23 og ville gerne lave et subselect, men det understøtter den jo ikke. (eller?)
I flg. SQL statement, ville jeg gerne kunne finde et antal records der matcher kravet i en anden tabel:
SELECT ARTICLE.ID, ARTICLE.TITLE, ARTICLE.PUNCHLINE, ARTICLE.ICONB, CATEGORYARTICLE.CATEGORYID, CATEGORYARTICLE.ARTICLEID FROM ARTICLE, CATEGORYARTICLE WHERE ARTICLE.ID = CATEGORYARTICLE.ARTICLEID AND CATEGORYARTICLE.CATEGORYID = 10 LIMIT 0, 5;

Jeg ville mægtigt gerne have muligheden for at se hvilke kolonner der matcher i tabellen ELEMENT.
ELEMENT
-------
ID
ARTICLEID
ETEXT

Så jeg prøvede at gøre sådan:
SELECT ARTICLE.ID, ARTICLE.TITLE, ARTICLE.PUNCHLINE, ARTICLE.ICONB, CATEGORYARTICLE.CATEGORYID, CATEGORYARTICLE.ARTICLEID, (SELECT COUNT(*) FROM ELEMENT WHERE ELEMENT.ARTICLEID = ARTICLE.ID) AS ELEMENTCOUNT FROM ARTICLE, CATEGORYARTICLE WHERE ARTICLE.ID = CATEGORYARTICLE.ARTICLEID AND CATEGORYARTICLE.CATEGORYID = 10 LIMIT 0, 5;

Men ud fra hvad min MySQL bog siger, så er det først understøttet af ver. 2.34. Så hvad gør en klog ?

vhE1
Avatar billede skwat Praktikant
27. oktober 2002 - 21:27 #1
konvatere databasen til Postgrees :) eller håndtere det i koden
Avatar billede eksperten1 Nybegynder
27. oktober 2002 - 21:30 #2
Tja, mit valg havde jo nok været MS SQL Server 2000 men hey, money talks, bullshit walks! :)
Avatar billede flse Nybegynder
27. oktober 2002 - 21:48 #3
Subselects er ikke nødvendige, men de er dog en dejlig ting :-)

Flg. burde virke:
SELECT ARTICLE.ID, ARTICLE.TITLE, ARTICLE.PUNCHLINE, ARTICLE.ICONB, CATEGORYARTICLE.CATEGORYID, CATEGORYARTICLE.ARTICLEID, COUNT(*) AS ELEMENTCOUNT
FROM ARTICLE, CATEGORYARTICLE, ELEMENT
WHERE ARTICLE.ID = CATEGORYARTICLE.ARTICLEID
AND CATEGORYARTICLE.CATEGORYID = 10
AND ELEMENT.ARTICLEID = ARTICLE.ID
GROUP BY ARTICLE.ID, ARTICLE.TITLE, ARTICLE.PUNCHLINE, ARTICLE.ICONB, CATEGORYARTICLE.CATEGORYID, CATEGORYARTICLE.ARTICLEID
LIMIT 0, 5;

Og ja, Postgres og MS SQL ville kunne løse det med subselects, men MySQL er hurtigere og mere stabil ..  ihvertfald til det meste ..
Avatar billede erikjacobsen Ekspert
27. oktober 2002 - 21:49 #4
Jeg har ikke læst din sql-sætning i detaljer - almindelig dovenskab - men
kan det ikke klares med en JOIN og en GROUP BY ?
Avatar billede eksperten1 Nybegynder
27. oktober 2002 - 21:52 #5
>flse: Hmm, tja jeg fik det nu løst selv, men din giver heller ikke de kolonner retur hvor der ikke findes en ELEMENT.ETEXT.

Se min:
SELECT ARTICLE.ID, ARTICLE.TITLE, ARTICLE.PUNCHLINE, ARTICLE.ICONB, CATEGORYARTICLE.CATEGORYID, CATEGORYARTICLE.ARTICLEID, COUNT(ELEMENT.ETEXT) AS ENUM FROM ARTICLE, CATEGORYARTICLE LEFT JOIN ELEMENT ON ELEMENT.ARTICLEID = ARTICLE.ID WHERE ARTICLE.ID = CATEGORYARTICLE.ARTICLEID AND CATEGORYARTICLE.CATEGORYID = 21 GROUP BY ID;
SELECT ARTICLE.ID, ARTICLE.TITLE, ARTICLE.PUNCHLINE, ARTICLE.ICONB, CATEGORYARTICLE.CATEGORYID, CATEGORYARTICLE.ARTICLEID, COUNT(*) AS ELEMENTCOUNT FROM ARTICLE, CATEGORYARTICLE, ELEMENT WHERE ARTICLE.ID = CATEGORYARTICLE.ARTICLEID AND CATEGORYARTICLE.CATEGORYID = 21 AND ELEMENT.ARTICLEID = ARTICLE.ID GROUP BY ARTICLE.ID, ARTICLE.TITLE, ARTICLE.PUNCHLINE, ARTICLE.ICONB, CATEGORYARTICLE.CATEGORYID, CATEGORYARTICLE.ARTICLEID;

vhE1
Avatar billede eksperten1 Nybegynder
27. oktober 2002 - 21:53 #6
>erikjacobsen. Yep, det kunne det med en left join.
:-))
Avatar billede eksperten1 Nybegynder
27. oktober 2002 - 21:53 #7
Og det var så den forkerte jeg fik klistret der:

SELECT ARTICLE.ID, ARTICLE.TITLE, ARTICLE.PUNCHLINE, ARTICLE.ICONB, CATEGORYARTICLE.CATEGORYID, CATEGORYARTICLE.ARTICLEID, COUNT(ELEMENT.ETEXT) AS ENUM FROM ARTICLE, CATEGORYARTICLE LEFT JOIN ELEMENT ON ELEMENT.ARTICLEID = ARTICLE.ID WHERE ARTICLE.ID = CATEGORYARTICLE.ARTICLEID AND CATEGORYARTICLE.CATEGORYID = 21 GROUP BY ID;
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