Omdat je het over twee records doet, zal je een self join moeten toepassen. Op dit moment weet ik alleen niet op welke grond je het 'andere' record selecteert, dus dat is vast nog even voor verbetering vatbaar:
SELECT a.iets
FROM tabel a
LEFT JOIN tabel b ON b.id = xxx
WHERE a.veld1='waarde1'
AND b.veld2 <> 'waarde2'
De selectie die ik dus niet weet op dit moment betreft dat wat in de ON clause van de JOIN staat.
Die query werkt maar voldoet niet aan wat ik zocht. Ik heb het nu opgelost met twee query's en dat werkt exact zoals ik wil. Het staat in een stukje code dat zeer zelden wordt gebruikt dus een query meer maakt daar niet echt uit.
Het kan toch het beste met 1 query+subquery. Geen data processen in php dus. Helaas wordt er hier vaak nogal spastisch gedaan over subquery's. Een subquery met een NOT EXISTS is feitelijk de aangewezen oplossing. Ik gebruik het regelmatig op zeer grote databases en met de juiste indexing gaat dit goed.
Jammer maar helaas.
Als we het over mysql hebben is een WHERE NOT EXISTS subquery nooit de aangewezen oplossing!!
En met zeer grote databases ga je zeker geen mysql gebruiken.
Jammer maar helaas.
Als we het over mysql hebben is een WHERE NOT EXISTS subquery nooit de aangewezen oplossing!!
En met zeer grote databases ga je zeker geen mysql gebruiken.
Ik moet inderdaad bekennen dat ik weinig mysql gebruik. Ik gebruik WHERE NOT EXISTS veelvuldig, indien nodig, in Oracle(11G) Echter ook in MySQL kan een WHERE NOT EXISTS efficient werken wanneer het 'gezochte dat niet mag bestaan' een geindexeerde column is en dan bij voorkeur een unique indexed, toch? Ik ben benieuwd waarom je van mening bent dat het in MySQL echt niet kan.
Omdat dit in MySQL altijd een full table scan tot gevolg heeft, ongeacht of je nu een extra filter in de hoofdquery hebt staan. Het wordt zelfs in de MySQL manual zelf aangekaart.
Maar het is wel MySQL specifiek, want ook in SQL Server kan je zonder probleem (is zelfs beter) NOT EXISTS subqueries toepassen.
Daarom mag er ook wel spastisch gedaan worden over subqueries, ik vermijd ze daar waar mogelijk