Bekijk Volledige Versie : [SQL] complexe queries uitvoeren
Ik heb twee tabellen, productCategory en productListing die er als volgt
uitzien:
productListing (productId is hier primary key)
+----------+----------------+
| productId| navText |
+----------+----------------+
| 000010 | product_naam1 |
| 000008 | product_naam2 |
| 000009 | product_naam3 |
productCategory
+----------+------------------+
| productId| subLabel |
+----------+------------------+
| 000008 | images |
| 000008 | references |
| 000009 | specifications |
| 000008 | description |
Wat ik wil bereiken: productListing.navText tonen enkel en alleen
wanneer productListing.productId ook voorkomt (liefst zelfs wanneer dit
meer dan tweemaal voorkomt) in productCategory.productId.
Welke syntax kan ik hier voor gebruiken? Ik heb gisteren met WHERE
COUNT(productCategory.productId)>0 zitten proberen maar dat wilde niet
lukken. En op school heb ik vorig jaar complexe queries met SQL gezien
(wat ik zeer interessant vond overigens toen ik zag wat er allemaal
mogelijk is mlet zo'n database) maar ik vind mijn nota's daarover niet
meer terug :(
Is er trouwens op internet misschien ook een website te vinden die
complexe queries duidelijk uitlegt?
Alvast bedankt.
Thijs-jan Veldhuizen
02/06/05, 11:55
Shenzou wrote:
> Ik heb twee tabellen, productCategory en productListing die er als volgt
> uitzien:
>
> productListing (productId is hier primary key)
> +----------+----------------+
> | productId| navText |
> +----------+----------------+
> | 000010 | product_naam1 |
> | 000008 | product_naam2 |
> | 000009 | product_naam3 |
>
>
>
> productCategory
> +----------+------------------+
> | productId| subLabel |
> +----------+------------------+
> | 000008 | images |
> | 000008 | references |
> | 000009 | specifications |
> | 000008 | description |
>
> Wat ik wil bereiken: productListing.navText tonen enkel en alleen
> wanneer productListing.productId ook voorkomt (liefst zelfs wanneer dit
> meer dan tweemaal voorkomt) in productCategory.productId.
>
> Welke syntax kan ik hier voor gebruiken? Ik heb gisteren met WHERE
> COUNT(productCategory.productId)>0 zitten proberen maar dat wilde niet
> lukken. En op school heb ik vorig jaar complexe queries met SQL gezien
> (wat ik zeer interessant vond overigens toen ik zag wat er allemaal
> mogelijk is mlet zo'n database) maar ik vind mijn nota's daarover niet
> meer terug :(
>
> Is er trouwens op internet misschien ook een website te vinden die
> complexe queries duidelijk uitlegt?
>
> Alvast bedankt.
SELECT navText FROM productListing INNER JOIN (SELECT productId FROM
productCategory HAVING COUNT(productCategory.*) > 2) ON
productListing.productId = productCategory.productId;
Zou de truc kunnen doen (niet getest). Maar dan moet je database wel
subqueries ondersteunen.
T-j
Johan Schoone
02/06/05, 13:25
Shenzou wrote:
> Ik heb twee tabellen, productCategory en productListing die er als volgt
> uitzien:
>
> productListing (productId is hier primary key)
> +----------+----------------+
> | productId| navText |
> +----------+----------------+
> | 000010 | product_naam1 |
> | 000008 | product_naam2 |
> | 000009 | product_naam3 |
>
>
>
> productCategory
> +----------+------------------+
> | productId| subLabel |
> +----------+------------------+
> | 000008 | images |
> | 000008 | references |
> | 000009 | specifications |
> | 000008 | description |
>
> Wat ik wil bereiken: productListing.navText tonen enkel en alleen
> wanneer productListing.productId ook voorkomt (liefst zelfs wanneer dit
> meer dan tweemaal voorkomt) in productCategory.productId.
De JOIN operator lijkt hiervoor geschikt, dus het wordt iets als:
SELECT navText FROM productListing, productCategory
WHERE productListing.productId = productCategory.productId
GROUP BY productCategory.productId
HAVING COUNT(*) > 2;
> Welke syntax kan ik hier voor gebruiken? Ik heb gisteren met WHERE
> COUNT(productCategory.productId)>0 zitten proberen maar dat wilde niet
> lukken. En op school heb ik vorig jaar complexe queries met SQL gezien
> (wat ik zeer interessant vond overigens toen ik zag wat er allemaal
> mogelijk is mlet zo'n database) maar ik vind mijn nota's daarover niet
> meer terug :(
Je was op de goede weg met de query, maar COUNT(*) werkt alleen i.c.m. GROUP
BY voor wat je wilt.
> Is er trouwens op internet misschien ook een website te vinden die
> complexe queries duidelijk uitlegt?
Geen idee. Kijk eens op http://databases.oreilly.com/ voor boeken.
--
Assume nothing, expect anything.
Johan Schoone wrote:
>
> De JOIN operator lijkt hiervoor geschikt, dus het wordt iets als:
>
> SELECT navText FROM productListing, productCategory
> WHERE productListing.productId = productCategory.productId
> GROUP BY productCategory.productId
> HAVING COUNT(*) > 2;
>
Bedankt! Dat werkt. Je zegt eerst dat de JOIN operator hiervoor geschikt
maar in je voorbeeld gebruik je die niet?
>
>
> Geen idee. Kijk eens op http://databases.oreilly.com/ voor boeken.
Zal daar eens rondneuzen straks.
Thijs-jan Veldhuizen wrote:
>
>
> SELECT navText FROM productListing INNER JOIN (SELECT productId FROM
> productCategory HAVING COUNT(productCategory.*) > 2) ON
> productListing.productId = productCategory.productId;
>
Deze werkt op het eerste zicht niet. Geeft niet, de INNER JOINs en
HAVINGs en ONs komen terug uit mijn geheugen dus ik weet weer wat ik
teruk kan bestuderen :)
Rene Pijlman
02/06/05, 15:15
Shenzou:
>Je zegt eerst dat de JOIN operator hiervoor geschikt maar in je
>voorbeeld gebruik je die niet?
Join is syntactic sugar voor een select uit meerdere tabellen met wat
condities (select ... from A, B where ...).
--
René Pijlman
Wat wil jij leren? http://www.leren.nl
Johan Schoone
02/06/05, 16:15
Shenzou wrote:
> Johan Schoone wrote:
>
>>
>> De JOIN operator lijkt hiervoor geschikt, dus het wordt iets als:
>>
>> SELECT navText FROM productListing, productCategory
>> WHERE productListing.productId = productCategory.productId
>> GROUP BY productCategory.productId
>> HAVING COUNT(*) > 2;
>>
>
> Bedankt! Dat werkt. Je zegt eerst dat de JOIN operator hiervoor geschikt
> maar in je voorbeeld gebruik je die niet?
Hij zit verborgen in de WHERE clause.
--
Assume nothing, expect anything.
Johan Schoone
02/06/05, 16:15
Thijs-jan Veldhuizen wrote:
[...]
> SELECT navText FROM productListing INNER JOIN (SELECT productId FROM
> productCategory HAVING COUNT(productCategory.*) > 2) ON
> productListing.productId = productCategory.productId;
>
> Zou de truc kunnen doen (niet getest). Maar dan moet je database wel
> subqueries ondersteunen.
Ik mis `GROUP BY productCategory.productId' in dit statement. Dit kan het
verschil maken.
--
Assume nothing, expect anything.
Thijs-jan Veldhuizen
03/06/05, 03:25
Johan Schoone wrote:
> Thijs-jan Veldhuizen wrote:
>
> [...]
>
>
>>SELECT navText FROM productListing INNER JOIN (SELECT productId FROM
>>productCategory HAVING COUNT(productCategory.*) > 2) ON
>>productListing.productId = productCategory.productId;
>>
>>Zou de truc kunnen doen (niet getest). Maar dan moet je database wel
>>subqueries ondersteunen.
>
>
> Ik mis `GROUP BY productCategory.productId' in dit statement. Dit kan het
> verschil maken.
Ai, stom!
T-j