[SQL] Zoeken naar rows die niet in andere table voorkomen

Pagina: 1
Acties:

  • pjonk
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Hey tweakers,

Ik heb 2 MySQL tables:

code:
1
2
3
4
5
6
7
CREATE TABLE downloads (
  DownloadID    smallint        UNSIGNED NOT NULL auto_increment,
  DownloadTitel varchar(100)    NOT NULL,
  DownloadFile  varchar(50) NOT NULL,
  PRIMARY KEY (DownloadID),
  UNIQUE (DownloadID)
);


code:
1
2
3
4
CREATE TABLE product_downloads (
  ProductID     smallint    UNSIGNED NOT NULL,
  DownloadID    smallint    UNSIGNED NOT NULL
);


Nu wil ik alle algemene downloads ophalen. Dat zijn in dit geval alle DownloadID's die niet voorkomen in de product_downloads tabel.

Dus dan doe ik zoiets als:
SELECT * FROM downloads WHERE DownloadID NOT EXIST IN product_downloads

Ik ben al een eeuwigheid aan het zoeken naar de magische SQL instructie die dit kan doen, maar kan 'm nergens meer vinden :(

Heeft iemand een idee?

It’s nice to be important but it’s more important to be nice


  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
MySQL ondersteunt geen subqueries, dus NOT EXISTS of NOT IN gaat niet werken.
Om dit toch op te lossen kun je een LEFT JOIN gebruiken. Dan krijg je zoiets:
code:
1
2
3
4
SELECT d.*
FROM downloads d
LEFT JOIN product_downloads pd ON pd.DownloadID = d.DownloadID
WHERE pd.DownloadID IS NULL

Never underestimate the power of


  • momania
  • Registratie: Mei 2000
  • Laatst online: 08:25

momania

iPhone 30! Bam!

zoiets?

code:
1
2
3
4
5
6
7
8
9
10
11
12
SELECT 
   * 
FROM 
   downloads 
WHERE 
   DownloadID NOT EXIST IN (

       SELECT
           DownloadID
       FROM product_downloads
       
    )


Maar dit is met een SUB-select en ik weet niet of de versie van MySQL die jij hebt
dat al ondersteund?

Neem je whisky mee, is het te weinig... *zucht*


  • whoami
  • Registratie: December 2000
  • Laatst online: 13:46
Of je kunt een komma-separoted string opmaken met de id's uit de ene table en die string dan als volgt gebruiken:
code:
1
select * from tabel where id not in ( 1 , 3, 5, ... )


Of, je kunt overstappen naar een echt RDBMS dat wel subqueries ondersteunt. ;)

https://fgheysels.github.io/


  • pjonk
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Hmm ja sub queries is idd geen mogelijkheid aangezien de MySQL versie die de webhoster draait geen subqueries ondersteunt.
De NOT IN methode is misschien een optie, maar lijkt me niet echt de meest snelle oplossing.
Evengoed bedankt voor de suggesties.

It’s nice to be important but it’s more important to be nice


  • pjonk
  • Registratie: November 2000
  • Laatst online: 29-12-2025
cameodski schreef op 21 oktober 2002 @ 13:47:
MySQL ondersteunt geen subqueries, dus NOT EXISTS of NOT IN gaat niet werken.
Om dit toch op te lossen kun je een LEFT JOIN gebruiken. Dan krijg je zoiets:
code:
1
2
3
4
SELECT d.*
FROM downloads d
LEFT JOIN product_downloads pd ON pd.DownloadID = d.DownloadID
WHERE pd.DownloadID IS NULL
Deze lijkt lekker te werken :)

It’s nice to be important but it’s more important to be nice

Pagina: 1