webForumDet fria alternativet

select:a med flera krav

4 svar · 250 visningar · startad av udden

uddenMedlem sedan mars 200174 inlägg
#1

ms sql.

har en tabell med ordrar, tblorder
har en tabell med produkter i ordrarna, tblorderprod
har en tabell med status till varje produkt, tblstatus

nu vill jag välja ut alla ordrar där ALLA produkterna tillhörande denna order har en viss status, t.ex "klar". Just det med alla är ju ett problem då jag inte vet hur man håller reda på ifall en av många produkter uppfyller kravet.

kan ju göra det med 2 recordset, ett för varje order och sedan för varje order gå igenom alla produkter och se om alla har denna status, men går detta att göra med en sqlsats?

blir glad för lite tankegånger, för oss mig står det helt still...

LarsGMedlem sedan dec. 200012 464 inlägg
#2
select * from tblorder  tord
where not exists
(select * from tblStatus 
  where status <> 'Klar'
      and orderid = tord.orderid )

Osäker på hur tabellerna är relaterade så jag gissade lite.

cyprysMedlem sedan dec. 20003 563 inlägg
#3

Fundering: Undrar vad SQL-forumet skulle vara utan LarsG :)

/r Förlåt om det var lite offtopic

uddenMedlem sedan mars 200174 inlägg
#4

så sant så sant..

ja det kan man undra.

förstår inte hur du skalar ner så enkelt LarsG, men man blir ju knappast förvånad längre?

hade inte en tanke på not in, men det är ju huvudet på spiken. som alltid :)

mkt tacksam..

uddenMedlem sedan mars 200174 inlägg
#5

epilog

ok. fungerar nu helt.

blev 6 inner joins och 2 subselect, och grunden var din lösning larsG, lite småchockad att denna sqlsats fungerar, men klaga ska man ju inte... ifall ngn nyfiken (heh) vill se så blev den så här:

strSQL = "SELECT ord.intId AS intId_ord, ord.datDate AS datDate " &_
"FROM tblOrder_ord ord " &_
"WHERE NOT EXISTS " &_
"(SELECT orp.intId_ord AS intId_ord " &_
"FROM ((tblOrderProduct_orp orp INNER JOIN " &_
"tblOrp_Link_tblSta_ols ols ON " &_
"orp.intId = ols.intId_orp) INNER JOIN " &_
"(tblStatus_sta sta INNER JOIN " &_
"tblStatusCode_sco sco ON sta.intId_sco = sco.intId) ON " &_
"ols.intId_sta = sta.intId AND sta.intId IN " &_
"(SELECT TOP 1 sta2.intId " &_
"FROM tblStatusCode_sco sco2 INNER JOIN " &_
"(tblStatus_sta sta2 INNER JOIN " &_
"(tblOrp_Link_tblSta_ols ols2 INNER JOIN " &_
"tblOrderProduct_orp orp2 ON " &_
"ols2.intId_orp = orp2.intId) ON " &_
"sta2.intId = ols2.intId_sta) ON " &_
"sco2.intId = sta2.intId_sco " &_
"WHERE orp2.intId = orp.intId " &_
"ORDER BY sta2.datDate DESC, sco2.intRank DESC" &_
")" &_
") " &_
"WHERE sco.intRank <> '6' AND orp.intId_ord = ord.intId) " &_
"AND ord.intSent <> 1"

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