Avatar billede Sami420 Nybegynder
14. december 2011 - 12:13 Der er 5 kommentarer

Group By og LEFT join mellem flere tabeller - Nu må jeg lære DET!

Hej alle sammen,

Jeg har arbejdet ca. 1 år med webprogrammering og kommer derfor ind imellem til også at lave sql.

Nåh men til sagen:
Jeg er MEGET usikker på hvordan jeg skal bruge LEFT JOIN, når der er tale om JOIN mellem flere tabeller end bare to. Altså hvordan er syntaksen og hvilke overvejselser skal jeg gøre.

Group by, bliver den KUN brugt i forbindelse med Agg funktioner og opføre den sig forskellig i Mysql og Ms sql ?


Jeg fik af en bruger herinde lavet denne sqL:


SELECT kategori1.kategori1navn,COUNT(annoncer.annonceid) AS antal
FROM (kategori1 LEFT JOIN kategori2 ON kategori1.kat1id=kategori2.fkkat1id)
LEFT JOIN annoncer ON kategori2.kat2id=annoncer.fkkat2id
GROUP BY kategori1.kategori1navn


Denne sql Virker fint i Mysql, men den fejler i  MS SQL.  MS sql forlanger vist alle de felter som står i SELECT skal også skrives i GROUP By.....

-......
Som i kan se brugeren her har lavet LEJT JOIN mellem 3 tabeller sådan:

FROM (kategori1 LEFT JOIN kategori2 ON kategori1.kat1id=kategori2.fkkat1id)
LEFT JOIN annoncer ON kategori2.kat2id=annoncer.fkkat2id


Og Det virker, men hvis jeg skulle lave det så ville det have set sådan ud:

FROM
kategori1 LEFT JOIN kategori2 ON kategori1.kat1id=kategori2.fkkat1id
AND
kategori2 LEFT JOIN annoncer ON kategori2.kat2id=annoncer.fkkat2id


Hvorfor virker min måde at gøre på ikke ?

......
Avatar billede Syska Mester
14. december 2011 - 13:26 #1
Vi kan gætte os frem til dine fejl herfra og til juleaften. Får du nogle fejl, så må du meget gerne poste dem.

Den join som virker i mysql men ikke i mssql, post lige hvad fejl du får eller hvad du mener med "ikke virker".

Join er ikke er predicate og kan derfor, så vidt jeg lige ved ikke forekomme i en WHERE clause.

Til din sidste ... overstående burde være forklaringen, men får du nogen fejl når du kører den query? Hvad siger SQL Server Management Studio når du afvikler den query?
Avatar billede Sami420 Nybegynder
16. december 2011 - 13:17 #2
Fejlen:

Column 'annoncer.annonceid is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Avatar billede Syska Mester
16. december 2011 - 13:29 #3
Den fejl siger vel sig selv, du kan ikke count på noget du ikke laver en group by på.

SELECT kategori1.kategori1navn,COUNT(annoncer.annonceid) AS antal
FROM (kategori1 LEFT JOIN kategori2 ON kategori1.kat1id=kategori2.fkkat1id)
LEFT JOIN annoncer ON kategori2.kat2id=annoncer.fkkat2id
GROUP BY kategori1.kategori1navn, annoncer.annonceid
Avatar billede Sami420 Nybegynder
13. februar 2012 - 12:02 #4
Tak buzzzz
Avatar billede Syska Mester
14. februar 2012 - 19:22 #5
Svar
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