Toon posts:

[MSSQL] Ietwat complexere query

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb de volgende 2 tabellen in een MS SQL database: child en client

Ze hebben een relatie in child waar een column child_client_id staat. Maar nu kunnen er meerdere children per client zijn. Nu wil ik echter met een SQL query achterhalen hoeveel clients er zijn met 1 child, 2 child en 3 child.

Bijvoorbeeld
Client met client_id = 1
Heeft 3 kinderen
Child met child_id = 1 en child_client_id= 1
Child met child_id = 2 en child_client_id= 1
Child met child_id = 3 en child_client_id= 1

Normaal zou ik zoiets oplossen met programma code, maar dit moet toch ook mogelijk zijn zonder code om per client uit te zoeken hoeveel children eraan verbonden zijn? Bovendien wordt de database zo groot dat een dergelijke oplossing teveel prestatie verlies met zich mee brengt.

Ik weet alleen niet welke statement hiervoor nodig is want ik ben niet al te ervaren op SQL gebied. Ik heb net een hele lijst met statements doorgenomen maar ben er nog geen tegen gekomen waar ik dit probleem mee zou kunnen oplossen?

Iemand een hint in de goeie richting?

  • EdwinG
  • Registratie: Oktober 2002
  • Laatst online: 14-04 15:31
INNER JOIN (of een LEFT OUTER JOIN, als je de processen zonder child ook wilt zien)

code:
1
2
SELECT child.childID FROM child
INNER JOIN (client ON child.child_client_id = client.clientID)

Bezoek eens een willekeurige pagina


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-04 17:49

NMe

Quia Ego Sic Dico.

Dit is afhankelijk van je datamodel, maar als je goed genormaliseerd hebt (waar het hier wel op lijkt) dan kun je een (INNER) JOIN proberen in combinatie met COUNT en GROUP BY. Kijk ook eens in onze FAQ voor meer uitleg over SQL en het gebruik van GROUP BY en joins, dan moet je er wel uit komen. :)

[ Voor 6% gewijzigd door NMe op 29-01-2006 22:58 ]

'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.


Verwijderd

Topicstarter
SELECT child.child_id FROM child INNER JOIN client ON child.child_client_id = client.client_id

Krijg ik dus alle child_id's uit de table child terug... Maar ik zal eens experimenteren met INNER JOIN.

Wantja alle children hebben een child_client_id? Kzal jullie FAQ eens doorlezen.

Daarnaast met die JOINs,

SELECT child.child_id FROM child LEFT JOIN client ON (child.child_client_id=client.client_id) WHERE client_id = 34

Kan ik bijvoorbeeld wel terug zoeken. Maar hoe ga ik hem dat nou als een soort for each client_id laten doen. Want ik wil dus counten hoeveel gevallen van 1 kind er zijn, hoeveel van 2 kinderen en hoeveel van 3 kinderen onder de clients? Programma code technisch heb ik dat gedaan, maar hoe helpt SQL mij hierbij?

[ Voor 68% gewijzigd door Verwijderd op 29-01-2006 23:39 ]


Verwijderd

zoiets als
SQL:
1
2
3
SELECT client.clientID, COUNT(child.childID) as childcount FROM child
INNER JOIN (client ON child.child_client_id = client.clientID)
GROUP BY client.clientID

laat het aantal kinderen per client zien
en als je die query als een sub select gebruikt voor zo'n zelfde query waar je de client-ids telt per childcount , is het al gebeurd ;)

[ Voor 7% gewijzigd door Verwijderd op 30-01-2006 13:24 . Reden: betere sub select link ]


Verwijderd

Topicstarter
Hmm exuses voor mijn onkunde :P (en het is al laat) maar

SELECT client_id FROM (SELECT client.client_id, COUNT(child.child_id) as childcount FROM child
INNER JOIN client ON child.child_client_id = client.client_id
GROUP BY client.client_id) WHERE childcount = 1

werkt niet, wat doe ik fout dan?

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-04 17:49

NMe

Quia Ego Sic Dico.

Het feit dat je HAVING niet kent. :P
SQL:
1
2
3
4
SELECT client.client_id, COUNT(child.child_id) as childcount FROM child
INNER JOIN client ON child.child_client_id = client.client_id
GROUP BY client.client_id
HAVING COUNT(child.child_id) = 1

offtopic:
Kun je [code=sql]-tags gebruiken als je SQL post? Dat is wat leesbaarder. :)

'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.


Verwijderd

offtopic:
done, kickuh die kleuren :D
Pagina: 1