[MySQL] JOIN probleem met NOT LIKE o.i.d.

Pagina: 1
Acties:

  • Dr.Bob
  • Registratie: November 1999
  • Laatst online: 21:37

Dr.Bob

Dr.Bob says: HEAL!

Topicstarter
Ben al uuuren met het volgende bezig, en kom er niet uit, dus als iemand kan helpen: heel graag!

Ik heb twee tabellen:
PROJECT
id
naam


en

DOCUMENTEN
projectid
documenttype
documentnaam


Hiermee wordt bijgehouden welke documenten en documenttypen er aanwezig zijn van bepaalde projecten, en beide zijn gekoppeld door project.id = documenten.projectid

Het dilemma:
Nu wil een een overzicht van projecten waarvan er géén documenten van het documenttype XX zijn! Maar ik krijg het alleen voor elkaar om een lijst van projecten te showen die wel documenten van het type XX hebben, maar wil eigenlijk een soort van WHERE COUNT(documenten.documenttype = 'XX') = NULL, maar dat werkt niet :( En als ik doe
code:
1
2
3
4
SELECT project.naam
FROM project,documenten
WHERE project.id = documenten.projectid
AND documenten.documenttype <> 'XX'

dan krijg ik gewoon het resultaat (de projectnamen) waarvan documenten van een ander type dan XX aanwezig zijn, maar ik wil weten waar type XX ontbreekt ...

Kan iemand me vertellen wat ik hier over het hoofd zie, of wat ik moet doen om het gewenste resultaat te krijgen?
Thanx,
Dr.B

NERDCORE FOR LIFE


Verwijderd

Volgens mij is dit het makkelijkste op te lossen met een subquery.
code:
1
2
3
4
5
SELECT project.naam
FROM project JOIN documenten ON project.id = documenten.projectid
WHERE projectid NOT IN
(SELECT DISTINCT projectid FROM documenten
WHERE documenttype = "XX")


Moet je wel Mysql => 4.1 hebben

[ Voor 9% gewijzigd door Verwijderd op 17-08-2005 18:57 ]


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
SQL:
1
2
3
4
SELECT project.naam
FROM Project P
LEFT OUTER JOIN Documenten D ON P.Id = D.ProjectId AND documenttype = 'XX'
WHERE D.ProjectId IS NULL

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Dr.Bob
  • Registratie: November 1999
  • Laatst online: 21:37

Dr.Bob

Dr.Bob says: HEAL!

Topicstarter
Hey thanx, het werkt nog niet helemaal naar wens, maar lijk hiermee wel op de goeie weg te zitten - dank daarvoor. Heb helaas op de server nog 3.x draaien, dus die subquery gaat niet lukken :(

NERDCORE FOR LIFE


  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
Hebben jullie not geleerd dat je nooit een not in moet gebruiken?
Gebruik liever een not exists, die is normaal gesproken namelijk sneller!

SQL:
1
2
3
SELECT project.naam
FROM project
WHERE NOT EXISTS (SELECT documenten.projectid WHERE documenten.documenttype = 'XX')


Zoiets dus.

[ Voor 37% gewijzigd door Mischa_NL op 18-08-2005 00:19 ]


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Heb jij nooit geleerd dat jij bij een exist beter een SELECT * kunt gebruiken? Dan kan de databse nl. een index gebruiken die hem het beste lijkt. Maar het kan dus niet met een subquery, dus moet je wel een join constructie gebruiken zoals in mijn voorbeeld.

Oops! Google Chrome could not find www.rijks%20museum.nl

Pagina: 1