[MySQL] SELECT-probleempje

Pagina: 1
Acties:

  • Mr. Right 1
  • Registratie: Maart 2000
  • Laatst online: 02-08-2023

Mr. Right 1

Do I need to say more?

Topicstarter
Ik heb een database met 2 tabellen:

Tabel_1
-------
- id
- naam
- email
- adres
- woonplaats


Tabel_2
-------
- id
- woonplaats

Nu wil ik een SELECT loslaten op Tabel_1 onder voorwaarde dat de woonplaats NIET in Tabel_2 voorkomt (als de woonplaats WEL in Tabel_2 staat, worden deze records dus ook niet getoond).

De SELECT over (alleen) Tabel_1 gaat goed, maar ik weet niet hoe ik de voorwaarde m.b.t. woonplaats erin moet verwerken. Ik heb een boel posts doorgenomen over JOIN-en, maar ik kom er niet uit. Wie kan mij een stukje op weg helpen?

Verwijderd

DRM heeft het bijna goed, allen moet je IS NULL gebruiken en niet =NULL

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

code:
1
2
3
4
5
6
7
8
SELECT
   *
FROM
   tabel_1
   left join tabel_2
    USING(woonplaats)
WHERE
   tabel_2.woonplaats IS NULL

blinde gok :)

edit: :X :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • sverzijl
  • Registratie: Januari 2001
  • Laatst online: 22:29
Op dinsdag 02 juli 2002 14:43 schreef Mr. Right 1 het volgende:
Ik heb een database met 2 tabellen:

Tabel_1
-------
- id
- naam
- email
- adres
- woonplaats


Tabel_2
-------
- id
- woonplaats

Nu wil ik een SELECT loslaten op Tabel_1 onder voorwaarde dat de woonplaats NIET in Tabel_2 voorkomt (als de woonplaats WEL in Tabel_2 staat, worden deze records dus ook niet getoond).

De SELECT over (alleen) Tabel_1 gaat goed, maar ik weet niet hoe ik de voorwaarde m.b.t. woonplaats erin moet verwerken. Ik heb een boel posts doorgenomen over JOIN-en, maar ik kom er niet uit. Wie kan mij een stukje op weg helpen?
ondersteunt MySQL subqueries ? zo ja :
code:
1
2
3
4
select a.id  from tabel_1 a
where not exists (select 1
            from   tabel_2 b
            where a.id  =  b.id)

  • Siliakus
  • Registratie: November 2000
  • Laatst online: 04-09 12:48
select * from tabel_1
where woonplaats not in ( select woonplaats from tabel_2)



???

Verwijderd

EN NEE, dat ondersteudn MySQL niet... :D de oplossing van drm met de kleine aanpassing die ik gaf is de goede
dus:
code:
1
2
3
4
5
6
7
8
SELECT   t.id,
         t.naam,
         t.email,
         t.adres,
         t.woonplaats
FROM       tabel_1 AS t 
LEFT JOIN    tabel_2 AS u USING(woonplaats)
WHERE     u.woonplaats IS NULL

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

sverzijl:
ondersteunt MySQL subqueries ? zo ja...
zo nee? wat dan? ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • PowerSp00n
  • Registratie: Februari 2002
  • Laatst online: 16:33

PowerSp00n

There is no spoon

Op dinsdag 02 juli 2002 14:46 schreef sverzijl het volgende:

[..]

ondersteunt MySQL subqueries ? zo ja :
code:
1
2
3
4
select a.id  from tabel_1 a
where not exists (select 1
            from   tabel_2 b
            where a.id  =  b.id)
Nee dat doet het niet :).

  • sverzijl
  • Registratie: Januari 2001
  • Laatst online: 22:29
Op dinsdag 02 juli 2002 14:47 schreef drm het volgende:

[..]

zo nee? wat dan? ;)
zo nee, dan joinen. is wat trager, maar werkt ook.

Belachelijk trouwens dat MySQL dat nog steeds niet ondersteunt.

  • PowerSp00n
  • Registratie: Februari 2002
  • Laatst online: 16:33

PowerSp00n

There is no spoon

Op dinsdag 02 juli 2002 14:49 schreef sverzijl het volgende:

[..]

zo nee, dan joinen. is wat trager, maar werkt ook.

Belachelijk trouwens dat MySQL dat nog steeds niet ondersteunt.
Ik dacht dat dat in 4.0 zit... Weet niet zeker :).

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:16
Op dinsdag 02 juli 2002 14:49 schreef sverzijl het volgende:

[..]

zo nee, dan joinen. is wat trager, maar werkt ook.
Een join is mi in de meeste gevallen sneller dan een subquery. Of niet?

https://fgheysels.github.io/


  • sverzijl
  • Registratie: Januari 2001
  • Laatst online: 22:29
Op dinsdag 02 juli 2002 14:52 schreef whoami het volgende:

[..]

Een join is mi in de meeste gevallen sneller dan een subquery. Of niet?
een normale join (misschien) wel, maar een outer join (die je hier dan toch echt nodig hebt) niet.

[edit]
I take that back. Zijn beide _vrijwel_ even snel (even query access path bekeken in Oracle voor zowel outer join als subquery).

  • Mr. Right 1
  • Registratie: Maart 2000
  • Laatst online: 02-08-2023

Mr. Right 1

Do I need to say more?

Topicstarter
Op dinsdag 02 juli 2002 14:45 schreef drm het volgende:
code:
1
2
3
4
5
6
7
8
SELECT
   *
FROM
   tabel_1
   left join tabel_2
    USING(woonplaats)
WHERE
   tabel_2.woonplaats IS NULL

blinde gok :)

edit: :X :)
OK, dit werkt! En stel dat ik in Tabel_2 nog een veld adres heb. Hoe ga ik de SELECT dan aanpassen?

Voor de duidelijkheid: Alle records opvragen uit Tabel_1 waarvan de woonplaats EN/OF adres NIET in Tabel_2 voorkomt.

PS: Met de eerste oplossing kan ik een heel eind verder, maar het zou mooi zijn als dit laatste ook gaat lukken.

  • Mr. Right 1
  • Registratie: Maart 2000
  • Laatst online: 02-08-2023

Mr. Right 1

Do I need to say more?

Topicstarter
Niemand?

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

Hoi,
[topic=392390/1/25]
Policy mbt het omhoogschoppen van threads. Wacht minstens 24 uur voor je je topic omhoog schopt. Doe dit dan ook alleen met een zinnige opmerking en dus niet met "Waarom antwoord er nou niemand" nadat je 5 minuten geen antwoord hebt gehad. Sommigen van ons hebben een leven :+

Doet iets met Cloud (MS/IBM)


  • Dido
  • Registratie: Maart 2002
  • Laatst online: 04-09 14:53

Dido

heforshe

Is dat dan niet gewoon
code:
1
2
3
4
5
6
7
8
9
SELECT
   *
FROM
   tabel_1
   left join tabel_2
    USING(woonplaats)
WHERE
   tabel_2.woonplaats IS NULL
OR tabel_2.adres    IS NULL

Of zie ik het nou te simpel?

[edit]blijkbaar... :(

Wat betekent mijn avatar?


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

D2k:
Hoi,
[topic=392390/1/25]
En voor straf moet je nu 24 uur wachten :+
</offtopic>
Dido:
Is dat dan niet gewoon
code:
1
2
3
4
5
6
7
8
9
SELECT
   *
FROM
   tabel_1
   left join tabel_2
    USING(woonplaats)
WHERE
   tabel_2.woonplaats IS NULL
OR tabel_2.adres    IS NULL

Of zie ik het nou te simpel?
Dat zie je idd te simpel... Op die manier ga je namelijk alle records uit tabel_1 selecteren waarvan de relatie "tabel_1.woonplaats <-> tabel_2.woonplaats" niet bestaat OF waar hij wel bestaat, en tabel_2.adres in dat geval fysiek gelijk is aan NULL

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Mr. Right 1
  • Registratie: Maart 2000
  • Laatst online: 02-08-2023

Mr. Right 1

Do I need to say more?

Topicstarter
Precies! Daar was ik dus inderdaad ook al achter. Ik heb ook al met de complete LEFT JOIN zitten klooien:
code:
1
2
3
4
5
6
7
8
9
SELECT
   *
FROM
   tabel_1
   left join tabel_2
    USING(adres,woonplaats)
WHERE
   tabel_2.woonplaats IS NULL
OR tabel_2.adres    IS NULL

Had ik ook al verzonnen....tevergeefs

Als ik de docs van MySQL doorneem, geldt de WHERE voor de gehele LEFT JOIN functie.

Er moet toch een mogelijkheid zijn om de LEFT JOIN uit te breiden met een of meerdere argumenten..???

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 04-09 14:53

Dido

heforshe

Op dinsdag 02 juli 2002 16:07 schreef Mr. Right 1 het volgende:
Als ik de docs van MySQL doorneem, geldt de WHERE voor de gehele LEFT JOIN functie.
Daar was ik ook vanuit gegaan...

WHERE ( tabel_2.woonplaats OR tabel_2.adres )IS NULL

Werkt ook niet ben ik bang?

Wat betekent mijn avatar?


  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

Probeer dit eens:
code:
1
2
3
4
5
6
7
SELECT
   *
FROM
   tabel_1
   left join tabel_2
    USING(adres,woonplaats) 
AND (tabel_2.woonplaats IS NULL OR tabel_2.adres IS NULL)
Pagina: 1