Avatar billede karl-koder Nybegynder
17. november 2008 - 08:33 Der er 13 kommentarer og
1 løsning

Join på 2 tabeller ?

Hejsa,

Jeg har to tabeller som følgende:

tabel 1
Id Modul Beskrivelse

tabel 2
Id ModulId Rettighed Aktiv

Det min sql skal gøre er at trække alle Moduler fra tabel 1 og fra tabel 2 trække Id, Rettighed og Aktiv tilhørende Modulerne fra tabel 1.

Jeg har prøvet mig frem med denne :

Select * From tabel1 Inner Join tabel2 On tabel1.Id = tabel2.Id

Men det resultere i at jeg får vist de forskellige moduler x antal gange, afhænnigt af hvor mange rettigheder jeg har til hvert modul i tabel 2.

Er der en der kan hjælpe mig med dette ?
Avatar billede hmortensen Nybegynder
17. november 2008 - 08:40 #1
Mon ikke du skal joine på tabel2.ModulId i stedet.
Avatar billede hrc Mester
17. november 2008 - 08:40 #2
Er ikke helt med på outputtet, men skal du ikke linke til modulid?

  Select * From tabel1 Inner Join tabel2 On tabel1.Id = tabel2.ModulId
Avatar billede aaberg Nybegynder
17. november 2008 - 08:40 #3
Er fejlen ikke bare at du skal joine på tabel 2 med ModulId i stedet for Id?

select tabel1.*, tabel2.Id as tabel2Id, tabel2.Rettigheder, tabel2.Aktiv
from tabel1
inner join tabel2 on tabel1.Id = tabel2.ModulId
Avatar billede karl-koder Nybegynder
17. november 2008 - 08:49 #4
Outputtet skulle gerne være som følger. I min tabel 1 har jeg f.eks. modulerne Nyheder, Produkter og Sider. Disse skal vises én gang med tilhørende rettigheder fra tabel 2 som kunne være view, add, edit og delete.

Det min sql gør nu er at den viser modulerne 4 gange altså :

Nyheder
- view
- add
- edit
- delete

Nyheder
- view
- add
- edit
- delete

Nyheder
- view
- add
- edit
- delete

Nyheder
- view
- add
- edit
- delete

Og den skal kun vise modulet én gang men med alle rettigheder.
Avatar billede karl-koder Nybegynder
17. november 2008 - 08:51 #5
Og den med tabel2.Id var en stave fejl, jeg har self. brugt tabel2.ModulId ;o)
Avatar billede aaberg Nybegynder
17. november 2008 - 08:54 #6
select tabel1.Id, tabel1.Modul, tabel1.Beskrivelse, tabel2.Aktiv
from tabel1
inner join tabel2 on tabel1.Id = tabel2.ModulId
group by tabel1.Id, tabel1.Modul, tabel1.Beskrivelse, tabel2.Aktiv
Avatar billede karl-koder Nybegynder
17. november 2008 - 09:05 #7
aaberg >> Det gjorde ingen forskel jeg får stadigt modulerne ud flere gange.
Avatar billede karl-koder Nybegynder
17. november 2008 - 09:35 #8
Da ideen er at jeg skal vise :

Nyheder
- view
- add
- edit
- delete

Produkter
- view
- add
- edit
- delete

osv. så skal jeg måske ud i at lave 2 sql'er, en der henter modulerne og en der henter rettighederne ?
Avatar billede hmortensen Nybegynder
17. november 2008 - 09:35 #9
Så kør en sætning der henter alle moduler, og for hvert modul der udskrives, hentes tilhørende rettigheder.
Avatar billede aaberg Nybegynder
17. november 2008 - 09:36 #10
Du har vel ikke tilføjet Rettiged kolonnen til den query jeg foreslår?

Hvis du vil have en række pr modul, skal du kun selecte et resultatset, hvor hver række er på samme niveau som modul. Du kan altså f.eks. ikke have Rettighed med, da du har 4 rettigheder pr modul, og SQL Serveren derfor ikke ved hvilken Rettighed den skal have med i resultatsættet. Hvis Aktiv kolonnen på samme måde ikke er på samme niveau som modul, kan du heller ikke have denne med i resultatsættet.

skriv en query som kun henter felter ud, som har en "en til en" forbindelse med modul, og brug "group by" til at fjerne alle duplikater.
Avatar billede aaberg Nybegynder
17. november 2008 - 09:38 #11
Jeg tror jeg misforstod dig. En Sql sætning henter en tabel ud, det du beskriver ligner mere en pivottabel, hvilken SQL ikke understøtter. Så at bruge 2 queries er nok en god ide.
Avatar billede karl-koder Nybegynder
17. november 2008 - 09:45 #12
Ok, jeg benytter mig af to query's istedet for, tak for hjælpen ;o)
Avatar billede karl-koder Nybegynder
20. februar 2009 - 00:51 #13
smid et svar
Avatar billede aaberg Nybegynder
20. februar 2009 - 08:32 #14
:-)
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