[SQL] Data uit 1 tabel waarin hierarchy zit

Pagina: 1
Acties:

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 07-04 15:08
Ik kan het niet echt makkelijk uitleggen in een topictitel, dus even uitleg.

Ik heb een tabel 'icons' met daarin allemaal gegevens van een boomstructuur over procesbeschrijvingen. Nu is de hierarchy als volgt opgebouwd:
- proces
-acties
-acties
-proces

etc.
Nu zitten er ook lege processen bij die nog niet beschreven zijn en daar ben ik niet in geintresseerd. De hierarchy is opgebouwd doordat elk record een parentID meekrijgt en elk record een iconType heeft. Voor processen is dit 103 en voor acties is dit tussen de 1 en de 8 (er zijn meerdere soorten acties).
Hoe kan ik nu met 1 SQL statement ervoor zorgen dat ik alleen de beschreven processen filter? Dus alleen de processen die onder zich records hebben hangen met icontypes tussen de 1 en de 8.

Ik kan wel heel simpel alle beschreven proces parentID's opvragen d.m.v.:
SELECT DISTINCT FK_ParentID FROM icons WHERE IconType BETWEEN 1 AND 8;

Maar dan moet ik dus weer een extra query doen voor elk ParentID om Naam van het ParentID te achterhalen. Maar hoe doe ik dit in 1 query? Dat moet toch mogelijk zijn?
Moet ik dit doen met een EXIST funtie of iets dergelijks??

EDIT: Oops...volgens mij is het helemaal niet zo moeilijk. Gewoon Select IconName FROM icons WHERE IconID IN (vorige query)

[ Voor 11% gewijzigd door armageddon_2k1 op 06-01-2006 13:20 ]

Engineering is like Tetris. Succes disappears and errors accumulate.


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Waarom niet gewoon een join?
SQL:
1
2
3
SELECT DISTINCT `process`.`name`
FROM `process` INNER JOIN `icons` ON `process`.`id` = `icons`.`FK_ParentID`
WHERE `icons`.`IconType` BETWEEN 1 AND 8

[ Voor 6% gewijzigd door NMe op 06-01-2006 13:20 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 07-04 15:08
Die JOIN geldt toch alleen als het twee afzonderlijke tabellen zijn?
Ik heb nu 1 tabel waaruit ik de parentID's haal. Vervolgens moet ik uit diezelfde tabel de ID's en Namen halen waar dus geldt (ID=ParentID).

EDIT:
Dat heb ik nou altijd. Ben ik hard aan het zoeken, denk ik "Nou...dan vraag ik het GoT maar, want ik loop vast" en dan heb ik het meteen nadat ik op Verstuur Bericht gedrukt heb.

Het antwoord was dus:
SELECT PK_IconID, IconNumber, IconName
FROM icons
WHERE PK_IconID IN (SELECT DISTINCT FK_ParentID FROM icons WHERE IconType BETWEEN 1 AND 8 ) AND IconType=103;

[ Voor 52% gewijzigd door armageddon_2k1 op 06-01-2006 13:24 ]

Engineering is like Tetris. Succes disappears and errors accumulate.


  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

je kan ook een tabel op zichzelf joinen, moet je alleen wel een alias gebruiken

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Je kunt een tabel ook met zichzelf joinen.
Iets als:
SQL:
1
2
3
SELECT 
FROM icons a
INNER JOIN icons b on a.IconId = b.FK_ParentId AND b.icontype BETWEEN 1 AND 8

Oops! Google Chrome could not find www.rijks%20museum.nl