Cookies op Tweakers

Tweakers is onderdeel van DPG Media en maakt gebruik van cookies, JavaScript en vergelijkbare technologie om je onder andere een optimale gebruikerservaring te bieden. Ook kan Tweakers hierdoor het gedrag van bezoekers vastleggen en analyseren. Door gebruik te maken van deze website, of door op 'Cookies accepteren' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt? Bekijk dan ons cookiebeleid.

Meer informatie
Toon posts:

MySQL vraagje

Pagina: 1
Acties:
  • 295 views

Vraag


  • Evatar
  • Registratie: juli 2012
  • Laatst online: 20-06 12:24
Mijn vraag

ik zou de personen moeten hebben die exact 2 adressen hebben en hiervan de persoon zijn naam, id en de straatnaam.

ik heb 3 tabellen:
code:
1
2
3
address met id (pk) en street
person met id (pk) en name
person_address met person_id (fk) en address_id (fk)


Relevante software en hardware die ik gebruik
ik gebruik de MySQL Workbench

Wat ik al gevonden of geprobeerd heb
code:
1
2
select p.name, p.id, a.street from person p, address a, person_address pa 
where p.id = pa.person_id and a.id = pa.address_id;

ik heb een poging gedaan hier een "and count(pa.person_id) = 2" aan toe te voegen maar dan krijg ik een invalid use of group function error.

Jullie zien waarschijnlijk ook wel dat dit een soort huistaak is maar ik wil graag de oplossing weten zodat ik het mogelijks kan snappen. Afstandsonderwijs laat veel te wensen over op vlak van begeleiding. |:(

Alle reacties


  • mvrhrln
  • Registratie: mei 2013
  • Laatst online: 23:24
trefwoorden, "group by" en "having"
tip: de count gebruik je in combinatie met de having

[Voor 49% gewijzigd door mvrhrln op 23-03-2021 22:59]


  • Psychokiller
  • Registratie: oktober 2001
  • Niet online
De vraag is vrij duidelijk en zegt eigenlijk twee queries:
1. Geef me iedereen met 2 adressen
2. Geef me de extra informatie die hierbij hoort

1: bepaal het userid van iedereen met twee adressen en gebruik een group by en een having

2: join het resultaat van 1 als geheel naar de rest van de informatie. Niet alles in één join dus en niet alles in 1 groupby dus.

  • ShitHappens
  • Registratie: juli 2008
  • Laatst online: 20:51
Klopt, als je een COUNT gaat doen, móet dat gepaard gaan met een GROUP BY clausule.

Heb even geen db bij de hand, maar theoretisch gezien zou (iets dat lijkt op) dit moeten werken:

SQL:
1
2
3
4
5
SELECT
    pa.person_id
FROM person_address pa
GROUP BY pa.person_id
HAVING COUNT(pa.person_id) = 2


Hier zorgt GROUP BY voor een groepering van de resulterende records. Vervolgens kun je in de HAVING clause aggregatie methodes toepassen, zoals COUNT. Daar mag je HAVING grofweg vergelijken met een variant op WHERE. Echter werkt WHERE vóór de GROUP BY, HAVING op het resultaat erna.

Maar goed, dan heb je nu enkel de person id's, dan zou 't nu met een extra JOIN of subquery moeten gaan lukken de rest van de data erbij te halen ;)

  • CurlyMo
  • Registratie: februari 2011
  • Laatst online: 23:30

CurlyMo

www.pilight.org

Psychokiller schreef op dinsdag 23 maart 2021 @ 23:02:
De vraag is vrij duidelijk en zegt eigenlijk twee queries:
[...]
Niet alles in één join dus en niet alles in 1 groupby dus.
Puur om de theorie zuiver te houden. Wat waarschijnlijk in deze fase veel te ver gaat voor TS. Maar met windows functies kan zoiets best prima in één join met één where.

geen vragen via PM die ook op het forum gesteld kunnen worden.


  • RobIII
  • Registratie: december 2001
  • Laatst online: 02:30

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

-O-
Give a man a fish and feed him for a day. Teach a man how to fish and feed him for a lifetime.
We zijn hier doorgaans niet heel happig op kant-en-klare antwoorden en je maakt 't TS hier wel héél makkelijk zo.

@Evatar Ik hoop dat je toch de moeite neemt je te verdiepen in wat @mvrhrln en @Psychokiller je probeerden duidelijk te maken. Zoals je in onze Quickstart leest zien we hier ook graag wat je zelf al gezocht en gevonden hebt, wat er niet werkte aan het gevondene etc. en dat mis ik nu. Ook een topictitel die de lading een beetje dekt is wel fijn voor een volgende keer.

[Voor 25% gewijzigd door RobIII op 23-03-2021 23:13]

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

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij

Pagina: 1

Dit topic is gesloten.



Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Microsoft Xbox Series X LG CX Google Pixel 5a 5G Sony XH90 / XH92 Samsung Galaxy S21 5G Sony PlayStation 5 Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True