een WHERE over beide tabellen van een JOIN

Status
Niet open voor verdere reacties.

not2smart

Nieuwe gebruiker
Lid geworden
1 apr 2011
Berichten
3
Hoi iedereen,

Ik raak er maar niet uit om een where statement te doen lukken in een sql waarin een join zit verwerkt
Ik heb 2 tabellen : 'product' en 'input'
In de tabel product zitten alle producten met naam en nummer en een minimum stocklevel (een soort warning getal als de stock moet worden aangevuld), een ook de klantnaam (zodoende ik weet tot wie dit product behoord)
In de tabel input zitten ingaves van inkomende en uitgaande hoeveelheden van producten, dus de ene keer zal een product een getal bevatten bij 'in' en de andere keer bij 'uit'

Ik heb ik wil nu een lijst tonen waarbij ik enkel de producten wil zien waarvan het totaal van 'in' en 'uit' kleiner is dan het stocklevel (dus ik wil alle producten zien die onder het 'stocklevel' zitten)

dit is de query die ik heb:
SELECT stocklevel, clientref, klant, productnr, product, productname, sum( `in` ) AS total_in, sum( `out` ) AS total_out, sum( `in` ) - sum( `out` ) AS stock FROM input JOIN ( product LEFT JOIN users ON product.clientref = users.username ) ON product.productname = input.product WHERE product.stocklevel > input.stock GROUP BY productname ORDER BY `product`.`clientref` ASC

Maar deze geeft gewoon alle producten (als ik input.stock tussen ' ' plaatst) anders krijg ik een error : Unknown column 'stock' in 'where clause'). Nogthans staat in de select 'stock' in de select.


Iemand een idee ?

Mvg,
Peter
 
Ik kan het niet testen maar volgensmij is de alias 'stock' geen onderdeel van de tabel input, maar gewoon een losse kolom. Dus zou je em aan moeten spreken met alleen stock en niet input.stock

Dat zou je eens kunnen proberen ;)
 
Frats,

Dank u voor uw reactie !

Ik heb dus ook dit geprobeerd, dus met enkel 'stock' ipv. 'input.stock' en dat geeft dezelfde error : Unknown column 'stock' in 'where clause'
dit was dus mij query:
SELECT stocklevel, clientref, klant, productnr, product, productname, sum( `in` ) AS total_in, sum( `out` ) AS total_out, sum( `in` ) - sum( `out` ) AS stock FROM input JOIN ( product LEFT JOIN users ON product.clientref = users.username ) ON product.productname = input.product WHERE product.stocklevel > stock GROUP BY productname ORDER BY `product`.`clientref` ASC

vreemd dat die 'stock' niet herkent wordt ?

mvg,
Peter
 
Wanneer je SUM() of vergelijkbare functies wilt gebruiken als voorwaarde in je query, dan kan dat niet met een WHERE. Daarvoor kun HAVING gebruiken, deze regel plaats je dan na de GROUP BY. Je krijgt dan zoiets: [sql]SELECT stocklevel
, clientref
, klant
, productnr
, product
, productname
, sum( `in` ) AS total_in
, sum( `out` ) AS total_out
, sum( `in` ) - sum( `out` ) AS stock
FROM input
JOIN ( product
LEFT JOIN users
ON product.clientref = users.username
) ON product.productname = input.product
-- WHERE product.stocklevel > stock
GROUP BY productname
HAVING product.stocklevel > ( sum( `in` ) - sum( `out` ) )
ORDER BY `product`.`clientref` ASC[/sql]
 
Epic,

Super !!
Dit was de juiste oplossing, ik had die HAVING nog nooit gebruikt.
Gelukkig zijn er mensen met meer sql kennis dan ik.

Hartelijk bedankt.

Mvg,
Peter
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan