[sql] Right join zit me te pesten

Pagina: 1
Acties:

  • foske
  • Registratie: Juli 2001
  • Laatst online: 23:31
Hallow..

Ik heb de volgende query geschreven:

code:
1
2
3
4
5
6
7
select afdelingen.id, left(afdelingen.naam,16) + ' (' + convert(varchar(10), count(*)) + ')' 
    from wachtende_bestellingen
    join medewerkers on medewerkerID = medewerkers.id
    right join afdelingen on afdelingen.id = medewerkers.afdelingID
    
    where afdelingen.bedrijfID = 11 and wachtende_bestellingen.bevestigID = 2
    group by afdelingen.naam, afdelingen.id



De bedoeling:
Ik heb een tabel afdelingen, en een tabel wachtende_bestellingen. Ik wil weten hoeveel wachtende bestellingen er zijn per afdelingen per bedrijf. In de tabel wachtende_bestelllingen zit de medewerkerID, en in de tabel medewerkers zit een id naar afdelingen.

De query werkt, als je het stukje van de where weglaat met:

"and wachtende_bestellingen.bevestigID = 2"

Alleen, het is wel de bedoeling dat hij ook aan deze critiria voldoet. Hoe stel ik die critiria goed in, met OR pakt hij hem dus ook niet (logisch, maar je gaat het toch proberen heh ;))

als ik de query uitvoer als hierboven, dan krijg ik niet de afdelingen te zien die 0 bestellingen wachtende hebben, en dat is natuurlijk niet de bedoeling.

Bedankt

Verwijderd

code:
1
2
3
4
5
6
select afdelingen.id, left(afdelingen.naam,16) + ' (' + convert(varchar(10), count(*)) + ')' 
from afdelingen
join medewerkers on afdelingen.id = medewerkers.afdelingID
join wachtende_bestellingen on wachtende_bestellingen.medewerkerID = medewerkers.id  
where afdelingen.bedrijfID = 11 and wachtende_bestellingen.bevestigID = 2
group by afdelingen.id

Probeer de bovenstaande query eens (ik heb de query simpelweg 'omgedraaid').

  • foske
  • Registratie: Juli 2001
  • Laatst online: 23:31
nope werkt ook niet, denk dat ik eens ga kijken wat ik kan bewerkstellingen met subquery's

  • foske
  • Registratie: Juli 2001
  • Laatst online: 23:31
oke, gelukt... Voor de geintereseerden:

code:
1
2
3
4
5
6
7
8
9
10
11
select afdelingen.id, left(afdelingen.naam,16) + ' (' + convert(varchar(10), 
    case 
        when sum(aantal) is null then '0'
        else sum(aantal)
        end) + ')' 
    from (select * from wachtende_bestellingen where wachtende_bestellingen.bevestigID = 2)wb
    join medewerkers on medewerkerID = medewerkers.id
    right join afdelingen on afdelingen.id = medewerkers.afdelingID
    
    where afdelingen.bedrijfID = 11
    group by afdelingen.naam, afdelingen.id


ennuh, skunkah, bedankt voor je tijd :Y)

Verwijderd

je kunt bij grotere hoeveelheden data beter geen subqueries gebruiken ..
maakt hier misschien niet zo uit nog maar dat je t weet in de toekomst ;)