webForumDet fria alternativet

JOIN-problem

5 svar · 226 visningar · startad av Martin.asp

Martin.aspMedlem sedan juli 200147 inlägg
#1

Hej!

Får inte ihop denna fråga. Tacksam för hjälp.

SELECT * FROM tblProject_pro pro INNER JOIN tblUsr_Link_tblPro_ulp ulp ON pro.intId = ulp.intId_pro JOIN tblUser_usr usr ON usr.intId = ulp.intId_usr WHERE pro.intId = 41

Det jag får ut med denna fråga:
Projektet och dess värden och de användare och dess värden som är kopplade till projektet. Ej övriga användare samt ingenting om det inte är några användare kopplade till projektet.

Det jag vill ha ut är följande:
Det valda projektet och dess värden (pro.intId) men alla användare (både de som mär kopplade till projektet och inte). Projektet skall visas även om det inte finns några användare kopplade till det.

Tabeller:

tblProject_pro = Projekt tabellen
tblUsr_Link_tblPro_ulp = Länktabellen mellan användare och projekt
tblUser_usr = Användartabellen

Mvh
Martin

LarsGMedlem sedan dec. 200012 464 inlägg
#2
SELECT * 
  FROM tblProject_pro pro left outer  JOIN 
            tblUsr_Link_tblPro_ulp ulp 
      ON pro.intId = ulp.intId_pro left outer JOIN 
            tblUser_usr usr 
      ON usr.intId = ulp.intId_usr 
   WHERE pro.intId = 41
Martin.aspMedlem sedan juli 200147 inlägg
#3

Hmm

Får inte det att fungera som jag tänkt mig:
Får bara upp ett resultat om det finns användare registrerade till projektet och då endast de som är registrerade.

Samma resultat som jag fick innan.

Skulle även vilja ha alla användare som finns som inte är registrerade på projektet. Skall även få samtliga användarna även om det inte är några användare registrerade på ett specifikt projekt.

/Martin

LarsGMedlem sedan dec. 200012 464 inlägg
#4
SELECT * 
  FROM tblUser_usr usr  left outer  JOIN 
            tblUsr_Link_tblPro_ulp ulp 
      ON usr.intId = ulp.intId_usr 
       left outer JOIN 
            tblProject_pro pro 
      ON    pro.intId = ulp.intId_pro 
    and  pro.intId = 41
Martin.aspMedlem sedan juli 200147 inlägg
#5

wow! :)

Löste det hela.

Två grejjer till för att göra det riktigt snyggt.

Skall kunna välja att det bara är Användare med usr.intLevel < 3 som skall listas samt att användarna bara listas en gång. Det blir dubbletter på de som är kopplade till ett projekt även om jag kör DISTINCT på t ex usr.intId.

Det fungerar heller ej att skriva WHERE usr.intLevel < 3.

/Martin

LarsGMedlem sedan dec. 200012 464 inlägg
#6

Om du vill ha villkor på usr-tabellen så får du lägga dom i en ON-klausul.

SELECT * 
  FROM tblUser_usr usr  left outer  JOIN 
            tblUsr_Link_tblPro_ulp ulp 
      ON usr.intId = ulp.intId_usr and usr.intLevel < 3
       left outer JOIN 
            tblProject_pro pro 
      ON    pro.intId = ulp.intId_pro 
    and  pro.intId = 41

Om du får duplikat på användare så kan det bero på att samma intid_usr finns flera gånger i link-tabellen, tex att samma person har olika roller i ett projekt. Hur är det?

select * from tbl_user, tblProject_pro pro 
 where pro.intId = 41 
     and usr.intLevel < 3
135 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)