SQL query, ik kom er niet uit...

Pagina: 1
Acties:

  • Passenger
  • Registratie: Januari 2000
  • Laatst online: 19-08 11:41
ik heb de volgende 2 tabellen:

de tabel Woningen
code:
1
2
3
4
5
6
7
8
+-----------+---------------+------+-----+------------+----------------+
| Field     | Type      | Null | Key | Default    | Extra       |
+-----------+---------------+------+-----+------------+----------------+
| id      | int(11)  |  | PRI | NULL     | auto_increment |
| plaats    | varchar(255)  |   |     |     |           |
| adres     | varchar(255)  |   |     |     |           |
| postcode  | varchar(6)    |   |     |     |           |
+-----------+---------------+------+-----+------------+----------------+

en woningen_verkocht:
code:
1
2
3
4
5
6
7
+--------------+---------+------+-----+------------+----------------+
| Field   | Type    | Null | Key | Default    | Extra       |
+--------------+---------+------+-----+------------+----------------+
| id         | int(11) |    | PRI | NULL     | auto_increment |
| refid   | int(11) |   |     | 0       |           |
| verkoopdatum | date    |  |     | 0000-00-00 |            |
+--------------+---------+------+-----+------------+----------------+

In de ene tabel (woningen) zitten dus allemaal woningen, en in de andere tabel wil ik aangeven of een woning verkocht is ja of nee.

In de 2e tabel (woningen_verkocht) staan 3 veldjes... 1 primary key veldje wat er niet toe doet, een refid veldje (wat trug moet slaan op een id uit de woningen tabel) en een datum waarop de woning verkocht is.

Wat wil ik? Ik wil de adres gegevens van alle woningen die NA bijvoorbeeld 20-12-2001 zijn verkocht. Hoe doe ik zoiets in 1 query? Let wel, de woningen die NIET verkocht zijn, staan ook niet in de woning_verkocht tabel!

Ik heb al verschillende query's geprobeerd, maar zonder het gewenste resultaat :(

Ik heb de volgende 2 geprobeerd:
code:
1
SELECT woningen.id, woningen.plaats, woningen.adres FROM woningen, woningen_verkocht WHERE ((woningen.id != woningen_verkocht.refid)&&(woningen_verkocht.verkoopdatum> '2001-12-06' ))

en:
code:
1
SELECT woningen.id, woningen.plaats, woningen.adres FROM woningen, woningen_verkocht WHERE ((woningen.id != woningen_verkocht.refid)||(woningen_verkocht.verkoopdatum> '2001-12-06' ))

maar beiden geven niet hetgeen wat ik wil! wat doe ik nou fout?

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
wat doe ik hier fout?
Je datamodel!

Waarom zet je niet alles in 1 table?

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
waarom heb je "woningen.id != woningen_verkocht.refid" ? als je "woningen.id = woningen_verkocht.refid" gebruikt bij de AND-variant (de eerste) moet het volgens mij werken.

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Op donderdag 27 december 2001 21:56 schreef Nielsz het volgende:
Je datamodel!
Valt toch wel mee? Ik zou het 'verkopen' oid noemen ipv 'woningen_verkocht', maar op zich lijkt het me goed :?

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
Op donderdag 27 december 2001 21:59 schreef marcusk het volgende:

[..]

Valt toch wel mee? Ik zou het 'verkopen' oid noemen ipv 'woningen_verkocht', maar op zich lijkt het me goed :?
imo niet, alles kan je in 1 table stoppen.

  • Wally-S
  • Registratie: September 2001
  • Laatst online: 15-09 18:34

Wally-S

-Snowboarding is art-

Op donderdag 27 december 2001 21:59 schreef marcusk het volgende:

[..]

Valt toch wel mee? Ik zou het 'verkopen' oid noemen ipv 'woningen_verkocht', maar op zich lijkt het me goed :?
Maar hij wil in die andere tabel aangeven of een woning verkocht is (ja of nee)
Dat is ook een eigenschap van een woning net als een plaats en adres, dus kan dat het beste in 1 tabel.

Snow is only frozen water


  • Passenger
  • Registratie: Januari 2000
  • Laatst online: 19-08 11:41
Op donderdag 27 december 2001 21:57 schreef marcusk het volgende:
waarom heb je "woningen.id != woningen_verkocht.refid" ? als je "woningen.id = woningen_verkocht.refid" gebruikt bij de AND-variant (de eerste) moet het volgens mij werken.
ik wil juist alle woningen die NIET verkocht zijn, of verkocht zijn NA die datum.... sorry, ik was misschien niet helemaal duidelijk...

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Op donderdag 27 december 2001 22:02 schreef Nielsz het volgende:
imo niet, alles kan je in 1 table stoppen.
het kan ja, maar is het ook beter? op deze manier kun je bijvoorbeeld een link leggen met de 'klanten' tabel :)

Verwijderd

Op donderdag 27 december 2001 22:02 schreef Nielsz het volgende:
imo niet, alles kan je in 1 table stoppen.
Dan kan ie een huis maar 1x verkopen, op deze manier kan ie per huis een geschiedenis bij houden. Ik weet niet wat de functionele specs van z'n systeem zijn, als het nvt is zou ik zeggen rot lekker in 1 tabel, is het wel handig/gevraagd is tjah dan maar 2 losse tabellen.

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
Op donderdag 27 december 2001 22:03 schreef Wally-S het volgende:

[..]

Maar hij wil in die andere tabel aangeven of een woning verkocht is (ja of nee)
Dat is ook een eigenschap van een woning net als een plaats en adres, dus kan dat het beste in 1 tabel.
Je vult me goed aan, ik kwam ff niet uit mijn woorden :) Maar deze jongen heeft dus gelijk :)

  • Wally-S
  • Registratie: September 2001
  • Laatst online: 15-09 18:34

Wally-S

-Snowboarding is art-

Op donderdag 27 december 2001 22:03 schreef marcusk het volgende:

[..]

het kan ja, maar is het ook beter? op deze manier kun je bijvoorbeeld een link leggen met de 'klanten' tabel :)
Leg het voordeel nou eens uit.
Je krijgt zo 2 tabellen met dezelfde hoeveelheid records met de zelfde primaire sleutels.
Dan is het nut van 2 tabelen toch weg :?

Snow is only frozen water


  • Wally-S
  • Registratie: September 2001
  • Laatst online: 15-09 18:34

Wally-S

-Snowboarding is art-

Op donderdag 27 december 2001 22:05 schreef Yarvieh het volgende:

[..]

Dan kan ie een huis maar 1x verkopen, op deze manier kan ie per huis een geschiedenis bij houden. Ik weet niet wat de functionele specs van z'n systeem zijn, als het nvt is zou ik zeggen rot lekker in 1 tabel, is het wel handig/gevraagd is tjah dan maar 2 losse tabellen.
Hij zegt dat hij wil bijhoude OF een huis is evrkocht (das dus eenja of een nee) dus het lijkt me nvt. :)

Snow is only frozen water


  • Passenger
  • Registratie: Januari 2000
  • Laatst online: 19-08 11:41
er is inderdaad misschien wel het een en ander mis aan het ontwerp, dat klopt.. maar daar ben ik een beetje te laat achter gekomen, en dat probeer ik nu op te lossen met een query... dit is de enige query die gebruik maakt van beide gegevens, dus zo'n ramp is het nou ook weer niet... alleen krijg ik m niet werkend! iemand misschien een query die WEL werkt?

  • Wally-S
  • Registratie: September 2001
  • Laatst online: 15-09 18:34

Wally-S

-Snowboarding is art-

Op donderdag 27 december 2001 22:07 schreef Tu-Tone het volgende:
er is inderdaad misschien wel het een en ander mis aan het ontwerp, dat klopt.. maar daar ben ik een beetje te laat achter gekomen, en dat probeer ik nu op te lossen met een query... dit is de enige query die gebruik maakt van beide gegevens, dus zo'n ramp is het nou ook weer niet... alleen krijg ik m niet werkend! iemand misschien een query die WEL werkt?
Ok om daar weer even op terug te komen waarom staat hier
code:
1
woningen.id != woningen_verkocht.refid

een ongelijk aan teken?
Als je die weg haald werkt het denk ik wel (even snel bekeken dan) :)

Snow is only frozen water


  • Passenger
  • Registratie: Januari 2000
  • Laatst online: 19-08 11:41
Op donderdag 27 december 2001 22:10 schreef Wally-S het volgende:

[..]

Ok om daar weer even op terug te komen waarom staat hier
code:
1
woningen.id != woningen_verkocht.refid

een ongelijk aan teken?
Als je die weg haald werkt het denk ik wel (even snel bekeken dan) :)
klopt, maar hoe krijg ik nu ook nog alle woningen erbij die NIET verkocht zijn (sorry, dat was ik in mn 1e post vergeten erbij te zetten)

  • Wally-S
  • Registratie: September 2001
  • Laatst online: 15-09 18:34

Wally-S

-Snowboarding is art-

Op donderdag 27 december 2001 22:12 schreef Tu-Tone het volgende:

[..]

klopt, maar hoe krijg ik nu ook nog alle woningen erbij die NIET verkocht zijn (sorry, dat was ik in mn 1e post vergeten erbij te zetten)
Met een subquery.
Het is een tijd geleden maar ik doe een gooi:
code:
1
Select id from woning where EXISTS NOT (select refid from woningen_verkocht)

Ikzou zeggen probeer eens en ik hoor het wel.

Snow is only frozen water


  • Passenger
  • Registratie: Januari 2000
  • Laatst online: 19-08 11:41
Op donderdag 27 december 2001 22:17 schreef Wally-S het volgende:

[..]

Met een subquery.
Het is een tijd geleden maar ik doe een gooi:
code:
1
Select id from woning where EXISTS NOT (select refid from woningen_verkocht)

Ikzou zeggen probeer eens en ik hoor het wel.
:'(... geen subquery's in mysql

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Op donderdag 27 december 2001 22:03 schreef Tu-Tone het volgende:
ik wil juist alle woningen die NIET verkocht zijn, of verkocht zijn NA die datum.... sorry, ik was misschien niet helemaal duidelijk...
welke SQL-variant is het precies? als het subselects ondersteunt kun je het zo doen:
code:
1
2
3
4
5
6
7
SELECT 
    woningen.id, woningen.plaats, woningen.adres
FROM
    woningen
WHERE
    id NOT IN (SELECT refid FROM woningen_verkocht) OR
    id IN (SELECT refid FROM woningen_verkocht WHERE verkoopdatum < '...')

maar door het 'id NOT IN (SELECT refid FROM woningen_verkocht)' deel lijkt het me niet echt efficient, dus kun je een boolean veld toevoegen aan je woningen tabel, zodat je alleen '...verkocht = 'nee' OR ...' hoeft te doen.

[edit] beetje laat zie ik :)
overigens ondersteunt de nieuwe versie van mysql wél sub-selects

  • Passenger
  • Registratie: Januari 2000
  • Laatst online: 19-08 11:41
Op donderdag 27 december 2001 22:20 schreef marcusk het volgende:

[..]

welke SQL-variant is het precies? als het subselects ondersteunt kun je het zo doen:
code:
1
2
3
4
5
6
7
SELECT 
    woningen.id, woningen.plaats, woningen.adres
FROM
    woningen
WHERE
    id NOT IN (SELECT refid FROM woningen_verkocht) OR
    id IN (SELECT refid FROM woningen_verkocht WHERE verkoopdatum < '...')

maar door het 'id NOT IN (SELECT refid FROM woningen_verkocht)' deel lijkt het me niet echt efficient, dus kun je een boolean veld toevoegen aan je woningen tabel, zodat je alleen '...verkocht = 'nee' OR ...' hoeft te doen.
mysql :(

  • Passenger
  • Registratie: Januari 2000
  • Laatst online: 19-08 11:41
Op donderdag 27 december 2001 22:20 schreef marcusk het volgende:

[..]
overigens ondersteunt de nieuwe versie van mysql wél sub-selects
kweet t... dr zijn alleen zo weinig (= geen?) hostingproviders die nieuwe mysql draaien :(

  • Passenger
  • Registratie: Januari 2000
  • Laatst online: 19-08 11:41
niemand meer?

Verwijderd

Op donderdag 27 december 2001 23:15 schreef Tu-Tone het volgende:
niemand meer?
Met het huidige datamodel (wat me heel goed lijkt t.a.v. evt. toekomstige uitbreidingsmogelijkheden) is toch echt helaas een subquery vereist wil je het in 1 resultset willen tonen.

Onderstaande zou je kunnen proberen maar ik denk niet dat het gaat werken:
code:
1
2
3
4
5
6
SELECT
  woningen.id, woningen.plaats, woningen.adres
FROM
  woningen, woningen_verkocht
WHERE
  ((woningen.id != woningen_verkocht.refid) || ((woningen.id = woningen_verkocht.refid) &&(woningen_verkocht.verkoopdatum > '2001-12-06' )))
Pagina: 1