[MSSQL] Combineren van verschillende select statements

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Rexomnium
  • Registratie: September 2000
  • Laatst online: 17-09 16:07

Rexomnium

Vincam aut moriar

Topicstarter
Om te beginnen ben ik een absolute beginner op SQL gebied. Ik ben bezig met het herstructureren van een pagina waarop verschillende artikelen worden getoond. Deze artikelen staan in een hoofdcategorie of in een subcategorie. Alle artikelen staan in dezelfde tabel (#cardCategories#). Hoofdcategorieën hebben een leeg parentID, subcategorieën hebben wel een parentID die verwijst naar de categorieID. Voorts is de omschrijving van de categorieën in een aparte tabel (#html#) gezet. Ik wil graag de volgende output bereiken:

hoofdcategorie 1 met omschrijving
subcategorie 1.1 zonder omschrijving
subcategorie 1.2 zonder omschrijving
subcategorie 1.3 zonder omschrijving
hoofdcategorie 2 met omschrijving
subcategorie 2.1 zonder omschrijving
etc...

Het is me al gelukt om met een query data van twee verschillende tabellen te combineren:

code:
1
2
3
4
5
6
7
8
SELECT *
    FROM cardCategories
    INNER JOIN html
    ON cardCategories.HTMLID = html.HTMLID    
    WHERE cardCategories.CHARGETABLEID > 2
    AND cardCategories.PARENTID IS NULL
    AND cardCategories.ACTIVE = 1
    ORDER BY cardCategories.[ORDER] ASC


Met Google vind ik verschillende mogelijke oplossingen voor mijn probleem. Zo lijkt UNION of LEFT OUTER JOIN een redelijke optie te zijn, maar ik snap niet goed waar ik dat in bovenstaande code moet plaatsen. Ook begrijp ik niet goed hoe ik het GROUP BY statement moet gebruiken hierin. Als ik deze zou doen op het parentID, dan krijg ik volgens mij eerst de lege parentID's en dan alle onderliggende gegroepeerd. Dat wil ik niet, aangezien elk blokje data begint met een leeg parentID en vervolgens een aantal parentID's die verwijzen naar het categoryID van eerstgenoemde.

Het beste wat ik heb bedacht is een gedrocht als:
code:
1
2
3
4
5
6
7
8
9
10
11
12
SELECT *
    FROM cardCategories
    INNER JOIN html
    ON cardCategories.HTMLID = html.HTMLID    
    WHERE cardCategories.CHARGETABLEID > 2
    AND cardCategories.PARENTID IS NULL
    AND cardCategories.ACTIVE = 1
UNION
SELECT *
FROM cardCategories
WHERE PARENTID = ....
    ORDER BY cardCategories.[ORDER] ASC


Ik werk overigens in ColdFusion met een MSSQL db. Kan iemand mij wijzen op de weg die ik dien te volgen? Ik heb een grote schop in de juiste richting nodig :)

//edit:
Wellicht handig ter illustratie. De output van de eerste SQL query op de website in kwestie. Ik heb alleen PARENTID IS NULL weggelaten, zodat je kunt zien wat er voor waardes in de gecombineerde tabellen (cardCategory en HTML) staat. Ik hoop niet dat dit wordt gezien als spam:
http://fastcards.nl/nl/over-fastcards/test/

[ Voor 6% gewijzigd door Rexomnium op 04-03-2011 23:35 ]

We zijn allemaal vaandeldrager in een optocht van gekwetsten.


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Misschien dat je hier iets aan hebt, en anders is onze SQL Faq wel het lezen waard ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Rexomnium
  • Registratie: September 2000
  • Laatst online: 17-09 16:07

Rexomnium

Vincam aut moriar

Topicstarter
Thanks. Maar hoe kan ik er nu voor zorgen dat alleen de HTML tabel wordt gecombineerd als het parentid NULL is?

Hoe bouw ik zo'n case when clausule in vóór een Inner Join statement?

We zijn allemaal vaandeldrager in een optocht van gekwetsten.


Acties:
  • 0 Henk 'm!

  • d00d
  • Registratie: September 2003
  • Laatst online: 16-09 13:23

d00d

geen matches

Waarschijnlijk kom je met een LEFT OUTER JOIN een heel eind. Het zou wel handig zijn als je de kolommen en datatypes van de tabellen zou geven. Eventueel met een voorbeeld van de werkelijke data in de tabellen.

42.7 percent of all statistics are made up on the spot.