Avatar billede orca Nybegynder
07. august 2002 - 20:44 Der er 13 kommentarer og
2 løsninger

Inner join problem

Hej alle. Jeg har to tabeller, tblArticleCategories og tblArticles. Hver række i tblArticles har et CategoryID knyttet til sig.

Hvordan laver jeg en Select sætning som henter alle kategorier fra tblArticleCategories, samt hvor mange artikler der er til hver artikel?

Mvh Mark
Avatar billede medions Nybegynder
07. august 2002 - 21:10 #1
fx.

SELECT AC.* FROM tblArticleCategories AC INNER JOIN tblArticles AR ON AC.Article=AR.Article

noget i den stil?
//>Rune
Avatar billede orca Nybegynder
07. august 2002 - 21:28 #2
Nej, den henter såvidt jeg kan se alle kategorier der har artikler tilknyttet. Den skal hente alle kategorierne, og antallet af artikler der er knyttet til kategorien (categoryid).

Mvh Mark
Avatar billede medions Nybegynder
07. august 2002 - 21:38 #3
ahh okay... :-) trode det var noget andet du mente.. well.. hmm.. hvis du koder i ASP kunne jeg godt stille et stykke kode op der kunne regne det ud hvis du vil ha' det...

//>Rune
Avatar billede orca Nybegynder
07. august 2002 - 21:46 #4
Det er ASP.NET, det skal gøres i en enkelt SQL linie.

/Mark
Avatar billede medions Nybegynder
07. august 2002 - 21:49 #5
Er ked af det, men så kan jeg vidst ik' hjælpe dig... :-(
-jeg kommer tilbage hvis jeg kommer på noget...

//>Rune
Avatar billede orca Nybegynder
07. august 2002 - 21:51 #6
Ok, helt i orden :)
Avatar billede tmceu Praktikant
08. august 2002 - 00:18 #7
Noget i denne stil bør kunne gøre det.

SELECT CategoryName, COUNT(*)
FROM tblArticleCategories AC
INNER JOIN tblArticles A ON AC.CategoryID = A.CategoryID
GROUP BY CategoryName
Avatar billede proaccess Nybegynder
08. august 2002 - 07:44 #8
Hvis du også vil have de kategorier med, hvor der ikke er nogle artikler (endnu), så prøv med:

SELECT AC.CategoryName, COUNT(AR.*) Antal
FROM tblArticleCategories AC
LEFT OUTER JOIN tblArticles AR ON AC.CategoryID = AR.CategoryID
GROUP BY AC.CategoryName
Avatar billede orca Nybegynder
08. august 2002 - 14:35 #9
Hej proaccess/tmceu. Følgende kode:

SELECT AC.Title, AC.CategoryID, COUNT(AR.ArticleID) Antal FROM tblArticleCategories AC LEFT OUTER JOIN tblArticles AR ON AC.CategoryID = AR.CategoryID GROUP BY AC.Title

Giver mig følgende fejl:
Column 'AC.CategoryID' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Det er i .NET. Har i nogen ide om hvad fejlen kan være?

Mvh Mark
Avatar billede proaccess Nybegynder
08. august 2002 - 14:37 #10
Du skal have alle ikke beregnede kolonner med i GROUP BY:

SELECT AC.Title, AC.CategoryID, COUNT(AR.ArticleID) Antal FROM tblArticleCategories AC LEFT OUTER JOIN tblArticles AR ON AC.CategoryID = AR.CategoryID GROUP BY AC.Title, AC.CategoryID
Avatar billede orca Nybegynder
08. august 2002 - 14:57 #11
Efter at have prøvet det, får jeg denne fejl :(

The text, ntext, and image data types cannot be compared or sorted, except when using IS NULL or LIKE operator.

Hvordan undgår jeg det, hvis felterne skal med i Group By delen?

/Mark
Avatar billede a1a1 Novice
08. august 2002 - 15:31 #12
laver felterne om til varchar :)

der er (ofte) ikke grund til at bruge text eller ntext, varchar kan indeholde optil 8000 karakterer (mener man siger der er 1024, på en a4 side)

Jeg mener dog det er muligt at converte så du godt kan bruge det i group by, noget ala.

SELECT CONVERT(VARCHAR(8000),AC.Title), AC.CategoryID, COUNT(AR.ArticleID) Antal FROM tblArticleCategories AC LEFT OUTER JOIN tblArticles AR ON AC.CategoryID = AR.CategoryID GROUP BY CONVERT(VARCHAR(8000),AC.Title), AC.CategoryID

Hvis det er ac.title der er et text felt (den vil så kun tage de første 8000 tegn)

;)
Avatar billede orca Nybegynder
08. august 2002 - 17:17 #13
Så fik jeg det endelig til at virke, jeg deler pointene mellem a1 og proaccess, håber i er tilfredse :)

Mvh Mark
Avatar billede tmceu Praktikant
08. august 2002 - 18:09 #14
Det er de sikkert. Næste gang du spørger om INNER JOIN skynder jeg mig at svare med en OUTER :-)
Avatar billede orca Nybegynder
08. august 2002 - 18:57 #15
Hehe, jeg må nok også lige få læst lidt op på forskellen på Outer og Inner Left & Right joins :) Så undgår jeg at bede om den forkerte type :)
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