[MySQL] Select x from z where x IN (SELECT a)

Pagina: 1
Acties:

  • MLS
  • Registratie: Oktober 1999
  • Laatst online: 23-08 14:09
Ik kom er niet meer uit, maandag a.s. moet er een compleet programma af zijn, maar ik loop nu ontzettend veel tijd te verdoen op een query.
Misschien weet iemand hier hoe ik dit moet aanpakken:
code:
1
2
3
4
5
DBQuery :
SELECT * from auto NATURAL JOIN model NATURAL JOIN brandstoffen NATURAL JOIN soorten NATURAL JOIN transmissies WHERE  modelnummer IN 
    (SELECT modelnummer from model NATURAL JOIN soorten  NATURAL JOIN brandstoffen  WHERE soort = "Personenauto" and brandstof = "Benzine" GROUP BY modelnummer )
AND NOT kenteken IN
    (SELECT kenteken FROM reservering WHERE ((eind >= 2002-6-28 and eind <= 2002-6-28) OR (begin >= 2002-6-28 and begin <= 2002-6-28) OR (begin <= 2002-6-28 and eind >= 2002-6-28)) );

Samengevat:
code:
1
SELECT c1 from t1 WHERE  c1 in (SELECT c2 from t2 WHERE c2=voorwaarde) AND NOT c1 in (SELECTc3 from t3 WHERE c3=voorwaarde)

Ik wil dus zorgen dat alle auto's overblijven die VOLDOEN aan het hebben van het modelnummer uit de 1e subquery EN NIET VOLDOEN aan het kenteken dat uit de 2e subquery rolt.

MySQL kent echter niet de IN operatie (zo lijkt het), maar hoe los ik het dan op? Met having counts?

  • whoami
  • Registratie: December 2000
  • Laatst online: 04-09 22:16
MySQL kent idd geen subqueries.

https://fgheysels.github.io/


  • MLS
  • Registratie: Oktober 1999
  • Laatst online: 23-08 14:09
Aha, maar hoe los je dit dan wel op?
Met domeincalculus etc lukt het me zo ;)

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

drm

f0pc0dert

MySQL kent wel de IN in deze vorm:
code:
1
2
3
4
5
6
SELECT
   *
FROM
   table
WHERE
   id IN (1,2,4,5)

En dat is misschien verwarrend voor subqueries :)

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


  • MLS
  • Registratie: Oktober 1999
  • Laatst online: 23-08 14:09
Dat wil dus zeggen dat ik het subquery zooitje extern moet ophalen en dan moet meegeven aan de overkoepelende DB query?
Ik kan dus niet met 1 transactie die verschillende (ookal niet genest) query's sturen...
Beetje lullig :+

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

drm

f0pc0dert

Ik kan zo 1,2,3 niet beoordelen hoe ver je komt met JOINS? Daar zou je toch een eind mee moeten komen, meestal

edit:
wellicht handig als je de queries even een beetje uitlijnt, dat ze wat beter leesbaar zijn :)

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


Verwijderd

ik zal ook een poging wagen :D
een NOT IN doe je iig emt een join en daarna geef je op dat dat veld NULL moet zijn, dus niet moet bestaan
code:
1
2
3
4
5
SELECT    id, kenteken
FROM    auto AS a
LEFT JOIN t2 ON c2 = voorwaarde
LEFT JOIN t3 ON a.kenteken = t3.kenteken
WHERE     t3.kenteken IS NULL

  • MLS
  • Registratie: Oktober 1999
  • Laatst online: 23-08 14:09
Dank jullie wel! ik moet daar toch wel een aardig eind mee komen.

  • MLS
  • Registratie: Oktober 1999
  • Laatst online: 23-08 14:09
Ben toch niet helemaal helder genoeg van geest vrees ik :?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT kenteken from auto as a
LEFT JOIN brandstoffen as b ON m.brandstofnummer=b.brandstofnummer
LEFT JOIN transmissies as t ON m.transmissienummer=t.transmissienummer
LEFT JOIN soorten as s ON m.soortnummer=s.soortnummer
LEFT JOIN reservering as r ON a.kenteken=r.kenteken
LEFT JOIN model as m ON a.modelnummer=m.modelnummer

WHERE brandstof = "Benzine" and transmissie = "Manueel"

  //WAAR BIJ DAT KENTEKEN NIET ééN RECORD VOORKOMT MET DE CONDITIE
((eind >= 2002-6-28 and eind <= 2002-6-28) OR (begin >= 2002-6-28 and begin <= 2002-6-28) OR (begin <= 2002-6-28 and eind >= 2002-6-28))
  //(Een reserverings interval waarin de auto beschikbaar moet zijn (en dus niet een reservering voor die auto mag voorkomen in dat tijdsvlak in de bestaande reserveringen))
  //Dus waarden NULL's en buitenliggende data mogen wel

hoe gooi ik dat laatste erbij... dat met dat null wat in de post hierboven staat gaat niet echt denk ik, toch?

Moet ik hiermee een soort globale HAVING gebruiken?
Pagina: 1