webForumDet fria alternativet

Join Join Join.....

6 svar · 261 visningar · startad av martinpartin

martinpartinMedlem sedan jan. 2001373 inlägg
#1

Hej,

Har tre st tabeller.

Projekt 400 poster
Projekttyp 10 poster
Activities 7000 poster

Jag vill lista ut alla projekt som har en activity knuten till sig med ett speciellt värde.

Jag är inte intresserad av acatvities utan vill ju bara visa projekten om de har en aktivitet knuten till sig med ett speciellt värde.

Misstänker att jag använder fel typ av JOIN. Har någon nått tips om hur jag kan gå vidare ?

Denna kod returnerar över 5000 poster och det skall vara mindre än 10 !


SQL01 = "SELECT * FROM "&_
"(Projekt LEFT OUTER JOIN Activities ON Projekt.ProjektID = Activities.loProjectID ) "&_
"LEFT OUTER JOIN Projekttyp ON Projekt.Projekttyp = Projekttyp.ID "&_
" WHERE (loGrp3ID = 1 OR loGrp3ID = 2 OR loGrp3ID = 3 OR loGrp3ID = 13) OR (Projekttyp = 1 OR Projekttyp = 2 AND NOT loGrp3ID = 7 AND NOT Slutkund = 8 AND NOT Projekttyp = 3 AND NOT Location = 31)"
emissionMedlem sedan dec. 19996 721 inlägg
#2

Du ska inte använda LEFT JOIN, eftersom du då får med alla projekt, såvida du inte smalar till det i WHERE-satsen. Vilken kolumn innehåller activityns "speciella värde"?

Tog bort lite parenteser också.

SQL01 = "SELECT * FROM "&_
"Projekt LEFT OUTER JOIN Activities ON Projekt.ProjektID = Activities.loProjectID "&_
"LEFT OUTER JOIN Projekttyp ON Projekt.Projekttyp = Projekttyp.ID "&_
" WHERE (loGrp3ID = 1 OR loGrp3ID = 2 OR loGrp3ID = 3 OR loGrp3ID = 13) OR (Projekttyp = 1 OR Projekttyp = 2 AND NOT loGrp3ID = 7 AND NOT Slutkund = 8 AND NOT Projekttyp = 3 AND NOT Location = 31)"
martinpartinMedlem sedan jan. 2001373 inlägg
#3

SQL01 = "SELECT * FROM "&_
"Projekt INNER JOIN Activities ON Projekt.ProjektID = Activities.loProjectID "&_
"INNER JOIN Projekttyp ON Projekt.Projekttyp = Projekttyp.ID "&_
" WHERE (loGrp3ID = 1 OR loGrp3ID = 2 OR loGrp3ID = 3 OR loGrp3ID = 13) OR (Projekttyp = 1 OR Projekttyp = 2 AND NOT loGrp3ID = 7 AND NOT Slutkund = 8 AND NOT Projekttyp = 3 AND NOT Location = 31)"

Jag måste tänkta helt konstigt.. .
denna returnerar 5600 poster.

alltså den som Om en aktvitet har loGrp3ID = 1 OR loGrp3ID = 2 OR loGrp3ID = 3 OR loGrp3ID = 13 + Några andra saker
Så vill jag att det projektet visas.. . Eftersom flera aktiviteter kan tillhöra ett projekt är jag inte intresserad av alla aktviteter utan bara skriva ut om det det finns ett projekt med en eller flera tillhörande aktiviteter som har värdena ovan. :OO

emissionMedlem sedan dec. 19996 721 inlägg
#4

Okej, då är jag med, nästan.. Nedstående fungerar rent teoretiskt, men kan falla på stor datamängd/datatyper. Kan du förklara din WHERE-sats lite mer specifikt?

SQL01 = "SELECT DISTINCT Projekt.* FROM "&_
"Projekt INNER JOIN Activities ON Projekt.ProjektID = Activities.loProjectID "&_
"INNER JOIN Projekttyp ON Projekt.Projekttyp = Projekttyp.ID "&_
" WHERE (loGrp3ID = 1 OR loGrp3ID = 2 OR loGrp3ID = 3 OR loGrp3ID = 13) OR (Projekttyp = 1 OR Projekttyp = 2 AND NOT loGrp3ID = 7 AND NOT Slutkund = 8 AND NOT Projekttyp = 3 AND NOT Location = 31)"
martinpartinMedlem sedan jan. 2001373 inlägg
#5

Om vi utgår ifrån tabellen Projekt

Till projekten tillhör en massa aktiviteter(Activities)
Dessa knyts till Projekt tabellen via "loProjectID"

Om ett projekt har en tillhörande aktvitet som har "loGrp3ID" = 1, 2 , 3 eller 13
så skall projektet visas... eller om projektet är av projekttyp 1 eller 2 samt om det inte är... AND NOT loGrp3ID = 7 AND NOT Slutkund = 8 ... osv...

Blev det bättre eller sämre ?

emissionMedlem sedan dec. 19996 721 inlägg
#6

Är slutkund och location kolumner i Projekt-tabellen?

Ska alla projekt med Projekttyp = 1 visas?

Ska projekt med Projekttyp = 2 döljas om det finns en aktivitet med loGrp3ID = 7 knuten till projektet, även om det också finns en aktivitet med t.ex. loGrp3ID = 3 "tillknuten"?

martinpartinMedlem sedan jan. 2001373 inlägg
#7

Återkommer med mer information imorgon. Måste sova på detta. Tack för hjälpen så länge.

132 ms totalt · 3 externa anrop · v20260731065814-full.2b84b982
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)