Toon posts:

[SQL 2005] Lastige Query

Pagina: 1
Acties:

Verwijderd

Topicstarter
Het kan komen omdat het maandag ochtend is, maar ik kom er even niet uit...

Tabel is als volgt (simpel samengevat)

ProductID Cat Value
1................2........3
1................4........1
1................5........2
2................2........2
2................3........6

Gaat even om het idee he, realiteit is een stuk complexer helaas. Het punt is als volgt, en waarschijnlijk zefls erg simpel, maar ik kom er ff niet op....

Ik wil de producten opvragen die voldoen aan deze criteria:
(cat = 2 AND value = 3) en (cat = 5 AND value = 2).

Dat zou dus enkel productId 1 op moeten leveren. Voor mijn gevoel moet het iets van een group by van productId zijn, maar 't lukt me ff niet :'( .

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
je wilt dus alleen de productid's waarvoor beide criteria waar zijn?

zoiets:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
select
     productid
from
     myTable
where
     (cat = 2 and value = 3)
     or
     (cat = 5 and value = 2)
group by
     productid
having
     count(productid) = 2  # aantal voorwaarden dat je hebt

  • cowgirl
  • Registratie: November 2000
  • Laatst online: 17-12-2020
SQL:
1
2
3
select productid from tabel
where productid in (select productid from tabel where cat = 2 and value = 3) 
  and productid in (select productid from tabel where cat = 5 and value = 2)

Verwijderd

Topicstarter
Optie van Edwardvb is nieuw voor me, nooit van gehoord. Optie cowgirl gaat wel werken, maar is dat qua performance wel verstandig om te doen? Je moet je voorstellen dat er ongeveer 15 van die statements per query komen op een tabel van zo'n 100.000 records.

Gaat de optie van Edwardvb ook werken als je nog meer voorwaarden hebt vanuit andere tabellen, i.c.m. wat joins?

  • cowgirl
  • Registratie: November 2000
  • Laatst online: 17-12-2020
Als je zorgt voor de juiste indexen gaat het volgens mij wel meevallen met de performance. Het zijn inderdaad een aantal extra selects die gedaan worden, maar met een index waar direct op de juiste plaats ingeprikt kan worden zijn die zeer snel uitgevoerd.

  • gassiepaart
  • Registratie: April 2004
  • Laatst online: 22-11 12:19
cowgirl schreef op maandag 23 april 2007 @ 10:24:
SQL:
1
2
3
select productid from tabel
where productid in (select productid from tabel where cat = 2 and value = 3) 
  and productid in (select productid from tabel where cat = 5 and value = 2)
dit is een inline select, probeer deze eens om te bouwen naar een inline view. Op die manier verbeter je de performance

  • gassiepaart
  • Registratie: April 2004
  • Laatst online: 22-11 12:19
maar werkt dit niet:

SELECT T1.veld1
FROM T1 where
(T1.veld2 = 2 AND T1.veld3= 3)
or
(T1.veld2 = 5 AND T1.veld3= 2)
group by t1.veld1

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 07:54

Janoz

Moderator Devschuur®

!litemod

Nee, bij die query krijg je ook id's terug die enkel veld2=2 en veld3=3 hebben, maar geen record hebben met veld2=5 en veld3=2.

Verder is dit niet echt een DTE topic. Ik verplaats hem daarom naar PRG.

[ Voor 23% gewijzigd door Janoz op 23-04-2007 10:58 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1