[MySQL] Alle records selecteren als verschil van 2 tables

Pagina: 1
Acties:

  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Topicstarter
Hallo!

Ik heb een probleem. Ik heb twee tabellen, waarvan de eentje ongeveer zo:

code:
1
2
3
4
5
table users (
  userID
  username
  password
)


en een andere, ongeveer zo:

code:
1
2
3
4
5
6
table info (
  infoID
  userID
  achternaam
  voornaam
)


De tabellen zijn fantasie en versimpelde weergave, maar mijn probleem is als volgt: Ik wil graag alle records (rows) selecteren uit de tabel 'users', waarvan de userID NIET voorkomt in de tabel 'info'.

Feitelijk wil ik dus het verschil hebben tussen de twee tabellen.

Ik weet niet hoe ik dit moet doen in MySQL.

In de manual heb ik wel iets gevonden als sub-queries met NOT EXISTS ervoor, maar mijn MySQL versie (4.0.12) lijkt dat niet te accepteren.

Kan iemand mij verder helpen?

Alvast enorm bedankt!

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Dat gaat in mysql via een outer join waarbij je moet selecteren op 'where joinkolom is null'.

Who is John Galt?


Verwijderd

SELECT users.* from users, info where users.userID != info.userID

werkt dat niet?

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Verwijderd schreef op 19 augustus 2004 @ 22:17:
SELECT users.* from users, info where users.userID != info.userID

werkt dat niet?
Nee, je joint de users met alle info records van andere users, dat bijna een volledig carthetisch produkt :o

Who is John Galt?


  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Topicstarter
Justmental

aha!

Dank voor die hint.

Nu weet ik dat het lui is enzo, en dat RTFM en dergelijke uiteraard van toepassing zijn, maar zou je een voorbeeldje willen geven aan de hand van mijn post? Dit is echt hogere wiskunde voor mij. Als ik een voorbeeldje heb, kan ik vanuit dat punt verder vogelen.

Alvast bedankt!

P.S.
En noem me maar een domme rukker!

[ Voor 7% gewijzigd door gvanh op 19-08-2004 22:26 ]


Verwijderd

gvanh schreef op 19 augustus 2004 @ 22:15:
Ik heb een probleem. Ik heb twee tabellen, waarvan de eentje ongeveer zo:

code:
1
2
3
4
5
table users (
  userID
  username
  password
)


en een andere, ongeveer zo:

code:
1
2
3
4
5
6
table info (
  infoID
  userID
  achternaam
  voornaam
)
Werkt dit in MySQL?

code:
1
2
3
4
5
SELECT userID
FROM users
MINUS
SELECT userID
FROM info

Eventueel zelf de username erbij fabriceren.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 19-05 21:24

NMe

Quia Ego Sic Dico.

www.sqlcourse.com
www.sqlcourse2.com

code:
1
SELECT users.* from users LEFT JOIN info WHERE info.userID IS NULL

Zoiets? :?
Verwijderd schreef op 19 augustus 2004 @ 22:30:
Werkt dit in MySQL?

code:
1
2
3
4
5
SELECT userID
FROM users
MINUS
SELECT userID
FROM info

Eventueel zelf de username erbij fabriceren.
Subquery, dus waarschijnlijk niet. Bovendien heb ik MINUS nog nooit gezien in MySQL. :)

[ Voor 59% gewijzigd door NMe op 19-08-2004 22:32 ]

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


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

NMe84 schreef op 19 augustus 2004 @ 22:31:
www.sqlcourse.com
www.sqlcourse2.com

code:
1
SELECT users.* from users LEFT JOIN info WHERE info.userID = NULL

Zoiets? :?
IS NULL ;)

[ Voor 6% gewijzigd door justmental op 19-08-2004 22:32 ]

Who is John Galt?


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 19-05 21:24

NMe

Quia Ego Sic Dico.

Dat staat er toch ook? Stiekem mijn quote verkloten! :D
* NMe bloost.

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


  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Topicstarter
Super-bedankt voor de hulp, ik ga weer vrolijk verder aan de slag!

  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Topicstarter
Hmmm... ik kom er toch nog niet helemaal uit, ook niet met de SQLcourse.com tutorial, die geeft weinig info over joins.

Wat ik nu heb, is het volgende:

code:
1
2
3
4
5
SELECT  *
FROM users
LEFT  JOIN info
ON info.userID = users.userID
WHERE info.userID=NULL;


Maar dat levert (hoewel geen SQL fout) geen enkel gevonden resultaat op, terwijl dat - naar aanleiding van de data in de tabellen - toch echt wel zou moeten!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 19-05 21:24

NMe

Quia Ego Sic Dico.

gvanh schreef op 20 augustus 2004 @ 00:49:
Hmmm... ik kom er toch nog niet helemaal uit, ook niet met de SQLcourse.com tutorial, die geeft weinig info over joins.

Wat ik nu heb, is het volgende:

code:
1
2
3
4
5
SELECT  *
FROM users
LEFT  JOIN info
ON info.userID = users.userID
WHERE info.userID=NULL;


Maar dat levert (hoewel geen SQL fout) geen enkel gevonden resultaat op, terwijl dat - naar aanleiding van de data in de tabellen - toch echt wel zou moeten!
I rest my case... :P


Dat MySQL "= NULL" pikt is zeker weer een of andere "feature" of "behaviour by design"?

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


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 23:06

Creepy

Tactical Espionage Splatterer

NMe84 schreef op 19 augustus 2004 @ 22:31:
Subquery, dus waarschijnlijk niet. Bovendien heb ik MINUS nog nooit gezien in MySQL. :)
Geen subquery. Dit zijn 2 losse queries net als bij een UNION. Alleen jammer inderdaad dat MySQL geen MINUS, INTERSECT e.d. ondersteunt..

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Topicstarter
Aha!

Ik dacht uiteindelijk dat dat nou juist de fout was in eerdere posts ... hij werkt nu inderdaad.

Mijn dank is grooooot!

  • klokop
  • Registratie: Juli 2001
  • Laatst online: 30-03 19:56

klokop

swiekie swoeng

Een conditie waarin gecheckt wordt op 'leegte' verschilt per datatype.
Voor intergers (getallen dus) gebruike men '= 0'
Voor strings (woorden dus) gebruike men 'is null'

"Passing silhouettes of strange illuminated mannequins"


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

klokop schreef op 20 augustus 2004 @ 11:38:
Een conditie waarin gecheckt wordt op 'leegte' verschilt per datatype.
Voor intergers (getallen dus) gebruike men '= 0'
Voor strings (woorden dus) gebruike men 'is null'
0 is niet hetzelfde als null.
Het zou best kunnen dat mysql geen null kent voor integers (ik zou het wel raar vinden), maar 0 is dan nog steeds geen null.

Who is John Galt?


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 19-05 21:24

NMe

Quia Ego Sic Dico.

justmental schreef op 20 augustus 2004 @ 11:50:
0 is niet hetzelfde als null.
Het zou best kunnen dat mysql geen null kent voor integers (ik zou het wel raar vinden), maar 0 is dan nog steeds geen null.
NULL is nog steeds gewoon een veld dat geen waarde bevat. Een lege string is in MySQL ook gewoon '', en niet NULL. Wat dat betreft is zelfs MySQL niet echt raar. :)

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


  • klokop
  • Registratie: Juli 2001
  • Laatst online: 30-03 19:56

klokop

swiekie swoeng

Maar als een veld nou van het type integer is, en er niks instaat, kan je volgens mij op 'niks' checken dmv '= o'. Of zit ik er naast?

"Passing silhouettes of strange illuminated mannequins"


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 19-05 21:24

NMe

Quia Ego Sic Dico.

klokop schreef op 21 augustus 2004 @ 00:32:
Maar als een veld nou van het type integer is, en er niks instaat, kan je volgens mij op 'niks' checken dmv '= o'. Of zit ik er naast?
Behoorlijk. Ten eerste is het = 0, en niet o, en ten tweede is NULL geheel wat anders dan 0. NULL wil zeggen dat er niets is ingevuld, 0 wil zeggen dat er een letterlijke 0 is ingevuld.

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

Pagina: 1