Toon posts:

[MySQL] Probleem met query

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een de volgende tabellen

aanvragen
id_aanvraag


tijdstippen
id_tijdstip
id_aanvraag
bevestigd


Nu wil ik alle aanvragen hebben waarbij ALLE records in tijdstippen bevestigd = 'j'

Dus doe ik
SELECT id_aanvraag FROM aanvragen, tijdstippen WHERE aanvragen.id_aanvraag=tijdstippen.id_aanvragen AND bevestigd='j'

Dit werkt op zich goed, alleen krijg ik nu ook id_aanvragen terug waarbij sommige corresponderende records in tijdstippen op j staan en andere op n.

Heeft iemand een idee hoe ik dit in 1 query kan doen? Ik gebruik MySQL 3 en kan geen subqueries gebruiken.

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Wat jij dus eigenlijk wilt is iets in de zin van:
code:
1
2
3
4
5
6
SELECT id_aanvraag FROM aanvragen a, tijdstippen t1
WHERE aanvragen.id_aanvraag=tijdstippen.id_aanvragen AND bevestigd='j'
AND NOT EXISTS (
  SELECT t2.id_aanvraag FROM tijdstippen t2
  WHERE t2.id_aanvraag = t1.id_aanvraag AND bevestigd='n'
)


Hoe je een query van een dergelijke structuur ombouwt kun je hier vinden.

Verwijderd

Topicstarter
Jep, maar ik kan dus geen subqueries gebruiken.

  • Facer
  • Registratie: Januari 2002
  • Niet online

Facer

Ken net.....

//offtopic Waarom nog mysql 3?

Kan je misschien de uitvoer die je nu van je query krijgt posten? Want vindt het maar vreemd waarom je ook N waardes krijgt...

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

hier zou je toch helemaal geen subquery voor nodig moeten hebben ?
SQL:
1
2
3
4
5
6
7
select 
  a.id_aanvraag 
from 
  aanvragen a 
  left join tijdstippen t on a.id_aanvraag=t.id_aanvraag 
WHERE 
  t.bevestigd='j'

[ Voor 7% gewijzigd door TheRookie op 11-01-2006 10:34 . Reden: layout ]


Verwijderd

Topicstarter
Nee dan kijkt hij nog steeds maar naar 1 record in tijdstippen. Zodra je het verband tussen de twee tabellen legt via id_aanvraag kijkt hij daarna of er 1 record is met bevestigd='j' ipv alle.

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Had de vraag verkeerd gelezen, je bedoeld dat er voor een id_aanvraag geen enkel record in tijdstippen mag zijn waarvoor bevestigd='n'; oeps :o

[ Voor 84% gewijzigd door TheRookie op 11-01-2006 11:12 ]


Verwijderd

Topicstarter
Is het op te lossen met een join?

SELECT a.id_aanvraag
FROM __aanvragen a
LEFT JOIN __tijdstippen t ON a.id_aanvraag = t.id_aanvraag
WHERE t.bevestigd = 'j'

__aanvragen
id_aanvraag
1


__tijdstippen
id_tijdstipid_aanvraagbevestigd
11j
21n


Als ik nu bovenstaande query doe, zou ik geen records terug moeten krijgen, omdat er een record op n staat.
Ik krijg echter id_aanvraag 1 terug.

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Verwijderd schreef op woensdag 11 januari 2006 @ 10:25:
Jep, maar ik kan dus geen subqueries gebruiken.
Ik voeg die link toch niet voor niks toe... zie mijn vorige post, klik op de link, zoek de 7 verschillen, fix de query en gaan met die banaan. Je mag er best zelf iets voor doen hoor!

Verwijderd

Topicstarter
Sorry, maar ik heb het al omgeschreven naar een LEFT JOIN. Maar dat levert hetzelfde resultaat. Of zie ik iets over het hoofd?

Verwijderd

SQL:
1
2
3
4
SELECT aanvragen.id_aanvraag
FROM aanvragen 
LEFT JOIN tijdstippen ON aanvragen.id_aanvraag = tijdstippen.id_aanvraag
WHERE tijdstippen.bevestigd like 'j';


Misschien helpt dit?
PS is nu zuiver gemaakt om aliasprobs te voorkomen

[ Voor 31% gewijzigd door Verwijderd op 11-01-2006 11:35 ]


Verwijderd

Topicstarter
Nee helaas, dat levert precies hetzelfde resultaat.

Verwijderd

Verwijderd schreef op woensdag 11 januari 2006 @ 11:29:
SQL:
1
2
3
4
SELECT aanvragen.id_aanvraag
FROM aanvragen 
LEFT JOIN tijdstippen ON aanvragen.id_aanvraag = tijdstippen.id_aanvraag
WHERE tijdstippen.bevestigd like 'j';


Misschien helpt dit?
PS is nu zuiver gemaakt om aliasprobs te voorkomen
Zuivere versie, kan iemand me trouwens uitleggen waar die underscores(__) voor dienen?

[ Voor 11% gewijzigd door Verwijderd op 11-01-2006 11:37 ]


Verwijderd

Topicstarter
nee dit helpt niet. Het enige wat je doet is een = vervangen voor een LIKE en dat werkt in deze query hetzelfde. Die underscores horen gewoon bij de naam van de tabel en dienen verder nergens voor.

Verwijderd

Verwijderd schreef op woensdag 11 januari 2006 @ 11:40:
nee dit helpt niet. Het enige wat je doet is een = vervangen voor een LIKE en dat werkt in deze query hetzelfde. Die underscores horen gewoon bij de naam van de tabel en dienen verder nergens voor.
Ik heb ook de aliasen vervangen door tabelnamen, dit om de query zuiver te houden. heb je dat ook gedaan? Anders weet ik het ook niet, die voorwaarde zou absoluut moeten uitsluiten dat er ook maar een record met een andere waarde dan 'j' moet verschijnen, je zou de left join nog doo een join kunnen vervangen, maar dan krijg je dus alleen de records die in beide tabellen aanwezig zijn..ik test het trouwens hier even...

[ Voor 29% gewijzigd door Verwijderd op 11-01-2006 11:50 ]


Verwijderd

Topicstarter
Ja heb ik ook gedaan, maar dat maakt niks uit. Ik denk dat die join iets anders moet.

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Je moet een gewone JOIN uitvoeren tussen aanvragen en tijdstippen en vervolgens een LEFT JOIN nogmaals op tijdstippen. Het voorbeeld op de door mij gegeven link is een select op een enkele tabel met een exists.

Ik kan je query helaas niet testen, maar het zou iets moeten worden als:
code:
1
2
3
SELECT a.id_aanvraag FROM aanvragen a, tijdstippen t1 LEFT JOIN tijdstippen t2 ON t1.id_aanvraag=t2.id_aanvraag AND t2.bevestigd = 'n'
WHERE t2.id_aanvraag IS NULL;
AND a.id_aanvraag = t1.id_aanvragen


edit:
copy-pasten zuigt :)

[ Voor 16% gewijzigd door bigbeng op 11-01-2006 13:27 ]


  • Swaptor
  • Registratie: Mei 2003
  • Laatst online: 16-02 22:21

Swaptor

Java Apprentice

Verwijderd schreef op woensdag 11 januari 2006 @ 11:35:
[...]


Zuivere versie, kan iemand me trouwens uitleggen waar die underscores(__) voor dienen?
Dat is de naming die TS heeft gekozen voor de velden, niks mySQL-related.

offtopic:
ah, te laat :(

[ Voor 5% gewijzigd door Swaptor op 11-01-2006 13:27 ]

Ontdek mij!
Proud NGS member
Stats-mod & forum-dude


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Hee TS, is het het nu gelukt of niet?
Pagina: 1