Toon posts:

[MYSQL] Join probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik zit met een MySQL probleempje. Zie hieronder mijn database structuur

code:
1
2
3
4
5
6
7
8
9
10
11
=======================
user
=======================
user_id int primary


=======================
alias
=======================
alias_id int primary
user_id int


Nu is het dus dat je een alias aan een user kan koppelen mbv de user_id

dus ik kan zeggen

code:
1
SELECT * FROM user,alias WHERE user.user_id=alias.user_id



Maar ik wil graag alle users zien waar GEEN alias aan gekoppeld is.

Ik loop me suf te joinen, maar krijg het maar niet goed. Kan iemand mij pointers geven?

Verwijderd

Kijk eens aan hoe mooi dit forum is:
FAQ
En er is ook nog een mooie zoekfunctie, rechtbovenin, waar je het antwoord op deze vraag ook zou kunnen vinden.

  • whoami
  • Registratie: December 2000
  • Laatst online: 14:33
Als je gebruik maakt van MySQL 4.0.1 (dacht ik) kan je dat oplossen dmv een subquery.

Anders zal je moeten gebruike maken van een OUTER JOIN waarmee je test op NULL values.

https://fgheysels.github.io/


  • koli-man
  • Registratie: Januari 2003
  • Laatst online: 01-04 11:43

koli-man

Bartender!!!!

user.user_id<>alias.user_id of NOT(user.user_id=alias.user_id) zoiets moet toch mogelijk zijn

Hey Isaac...let's go shuffleboard on the Lido - deck...my site koli-man => MOEHA on X-Box laaaiiiff


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 14:37
LEFT JOIN, controleren op null. Klaar!

Roomba E5 te koop


  • Dido
  • Registratie: Maart 2002
  • Laatst online: 09:56

Dido

heforshe

Koli-man: Dan krijg je zo goed als een cartesiaans product ;)

Stel, je hebt users:

1
2
3
4

Je hebt aliassen

1 2
3 4

En je gaat joinen op user.userid <> alias.aliasid, dan krijg je

1 3 4
2 1 2
2 3 4
3 1 2
4 1 2
4 3 4

En dat is niet wat je wilt. Je wilt alleen 2 en 4 terugkrijgen.

code:
1
2
3
4
5
SELECT a.user_id 
FROM user a 
  LEFT OUTER JOIN alias b 
  ON a.userid = b.aliasid 
WHERE b.aliasid = NULL


Of iets in die richting?

[ Voor 79% gewijzigd door Dido op 08-12-2005 13:14 ]

Wat betekent mijn avatar?


  • koli-man
  • Registratie: Januari 2003
  • Laatst online: 01-04 11:43

koli-man

Bartender!!!!

Dido schreef op donderdag 08 december 2005 @ 13:10:
Koli-man: Dan krijg je zo goed als een cartesiaans product ;)
ok, dus pakt hij alle mogelijke combinaties.....

mmm...toch maar weer eens sql bijspijkeren.

Hey Isaac...let's go shuffleboard on the Lido - deck...my site koli-man => MOEHA on X-Box laaaiiiff


  • bmistiaen
  • Registratie: Februari 2005
  • Laatst online: 09-01 15:12
code:
1
2
3
4
5
SELECT * 
FROM user
WHERE NOT EXISTS (SELECT NULL
                  FROM alias
                  WHERE alias.user_id=user.user_id)

of
code:
1
2
3
4
SELECT * 
FROM user
WHERE user.user_id NOT IN (SELECT alias.user_id
                           FROM alias)

De eerste query is performanter.
Misschien is dit niet helemaal conform MySQL syntax,
maar ik ben dan ook Oracle programmeur.

Verwijderd

Topicstarter
bmistiaen schreef op donderdag 08 december 2005 @ 13:13:
code:
1
2
3
4
5
SELECT * 
FROM user
WHERE NOT EXISTS (SELECT NULL
                  FROM alias
                  WHERE alias.user_id=user.user_id)

of
code:
1
2
3
4
SELECT * 
FROM user
WHERE user.user_id NOT IN (SELECT alias.user_id
                           FROM alias)

De eerste query is performanter.
Misschien is dit niet helemaal conform MySQL syntax,
maar ik ben dan ook Oracle programmeur.
jaaaaaaa

code:
1
2
3
4
SELECT * 
FROM user
WHERE user.user_id NOT IN (SELECT alias.user_id
                           FROM alias)


deed ut um..... pfff loop ik ff 2 dagen te kloten ermee... bedankt voor de moeite !!!!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Verwijderd schreef op donderdag 08 december 2005 @ 13:43:
jaaaaaaa

code:
1
2
3
4
SELECT * 
FROM user
WHERE user.user_id NOT IN (SELECT alias.user_id
                           FROM alias)


deed ut um..... pfff loop ik ff 2 dagen te kloten ermee... bedankt voor de moeite !!!!
Maar het werkt mooi niet in MySQL versies ouder dan 4.1. ;)

SQL:
1
2
3
SELECT * 
FROM `user` LEFT JOIN `alias` ON `alias`.`user_id`
WHERE `alias`.`verplichtveld` IS NULL

Die zou het ook moeten doen (zoals sig69 en Dido ook al zeggen), en die doet het in alle MySQL versies die op het moment nog veel gebruikt worden. ;)

'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