[MYSQL/PHP] selecteren uit 2 tabellen vergelijken met 3e

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • pin_point
  • Registratie: April 2005
  • Laatst online: 20-09 15:39
Zoals de topic titel al zegt wil ik uit 2 tabellen (klanten (primary key klantnr) en polissen (primary key polisnr) alle gegevens halen die daar instaan voor een overzicht.
Waarden van tabellen:
klanten
* klantnr
* klantvoornaam
* klantachternaam
* klanthuisnr
* etc..

polissen
* polisnr
* omschrijving
* geldigheid
* etc

klantpol (de 3e vergelijkingstabel)
* klantnr
* polisnr


Op het moment doe ik het nog met het volgende statement, maar dan krijg ik op de pagina alle klanten en polissen allemaal aan elkaar gekoppeld wat ik niet wil hebben.

SQL:
1
SELECT * FROM klanten, polissen GROUP BY polisnr, klantnr

Ook wel enigzins logisch dat dit statement alles laat zien omdat ik hier geen 3e tabel bij aanroep

Nu heb ik op internet al verschillende uitgelegde pagina's gevonden maar ik kan er voor mijzelf niet veel van smeden, en ik heb verder ook geen idee meer waar ik moet beginnen.

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • Sander
  • Registratie: Juni 2004
  • Niet online
SQL:
1
SELECT kp.*, k.*, p.* FROM klantpol AS kp LEFT JOIN klanten as k ON kp.klantnr = k.klantnr LEFT JOIN polissen AS p ON kp.polisnr = p.polisnr


Dit ongeveer wat je bedoeld?

LEFT JOIN voegt op basis van de waarden in de "rechter" tabel de bijbehorende gegevens uit de linkertabel toe. In dit geval wordt op basis van de klantpol tabel de bijbehorende gegevens uit de andere tabellen toegevoegd.

[ Voor 38% gewijzigd door Sander op 29-04-2007 21:51 ]


Acties:
  • 0 Henk 'm!

  • pin_point
  • Registratie: April 2005
  • Laatst online: 20-09 15:39
sander- schreef op zondag 29 april 2007 @ 21:50:
SQL:
1
SELECT kp.*, k.*, p.* FROM klantpol AS kp LEFT JOIN klanten as k ON kp.klantnr = k.klantnr LEFT JOIN polissen AS p ON kp.polisnr = p.polisnr


Dit ongeveer wat je bedoeld?

LEFT JOIN voegt op basis van de waarden in de "rechter" tabel de bijbehorende gegevens uit de linkertabel toe. In dit geval wordt op basis van de klantpol tabel de bijbehorende gegevens uit de andere tabellen toegevoegd.
ja dat is eigenlijk precies wat ik bedoel... ben nu even aan het doorkijken van _hoe_ heb je dat gedaan, vooral met het creëeren van aliasen binnen een SQL statement, maar ik zal er wel uitkomen :)

Acties:
  • 0 Henk 'm!

  • Sander
  • Registratie: Juni 2004
  • Niet online
Je kunt bij het selecteren van een tabel of veldnaam altijd AS naam gebruiken om er een alias van te maken. Zelfde als bij het maken van counts:

SELECT COUNT(bedrag) AS totaal FROM tabel

Acties:
  • 0 Henk 'm!

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 21-02 08:50

BikkelZ

CMD+Z

Je hoeft niet persé AS te gebruiken, al maakt dat het soms leesbaarder (en soms ook juist niet).

Dus dit mag allebei:

SQL:
1
SELECT p.id AS persoon_id FROM persoon AS p


SQL:
1
SELECT p.id persoon_id FROM persoon p

iOS developer


Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

pin_point schreef op zondag 29 april 2007 @ 21:47:
SQL:
1
SELECT * FROM klanten, polissen GROUP BY polisnr, klantnr
Legacy-SQL syntax nu direct afleren, dit grondig lezen en dit grondig lezen.

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Waarom niet gewoon:

SQL:
1
2
3
4
SELECT kp.*, k.*, p.* 
FROM klantpol kp, klanten k, polissen p 
WHERE kp.polisnr = p.polisnr 
  AND kp.klantnr = p.klantnr


Lijkt me namelijk gewoon een inner join (equi join).

[ Voor 14% gewijzigd door Grijze Vos op 01-05-2007 12:19 ]

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info

Pagina: 1