SQL : "not in" statement

Pagina: 1
Acties:
  • 4.299 views sinds 30-01-2008
  • Reageer

  • imp4ct
  • Registratie: November 2003
  • Laatst online: 29-10-2025
Moest een query hebben die alle ID's uit mijn tabel site_gscmp_images filtert die al voorkomen in de tabel site_gscmp.

Nu had ik wat liggen zoeken op Google en vond ik het statement "not in" en ik wilde het statement dan even uitvoeren in mijn mySQL, maar hij geeft dus telkens een fout.

Foutmelding : #1064 - You have an error in your SQL syntax near 'SELECT gscmp_image_id FROM site_gscmp ) LIMIT 0, 30 ' at line 1

code:
1
2
3
4
5
6
7
SELECT DISTINCT image_id
FROM site_gscmp_images
WHERE image_id NOT
IN (
SELECT gscmp_image_id
FROM site_gscmp
)


Weet dus niet wat z'n probleem is, mij lijk het de haakjes te zijn, maar zou het vreemd vinden.
Iemand raad ?

Bedrijf : Webtrix

Foto materiaal:
Nikon D7100 | Nikor AF-S DX 18-105mm | Nikor AF-S 50mm | Nikon SB600


  • Jrz
  • Registratie: Mei 2000
  • Laatst online: 22:08

Jrz

––––––––––––

Ennnnnnnnnn laat losssssssss.... https://github.com/jrz/container-shell (instant container met chroot op current directory)


  • Koppensneller
  • Registratie: April 2002
  • Laatst online: 16-04 15:40

Koppensneller

winterrrrrr

Welke mySQL versie heb je, want zover ik weet ondersteunen alleen de laatste paar versies het gebruik van subqueries.

Edit:

even opgezocht, vanaf 4.1 worden ze ondersteund

[ Voor 21% gewijzigd door Koppensneller op 17-01-2006 20:49 ]


  • Gertjan
  • Registratie: Oktober 2001
  • Laatst online: 07-02 20:23

Gertjan

mmmm, beer...

Welke versie van MySQL gebruik je? MySQL < 4.1 ondersteunt sowieso geen subqueries, en ik weet niet zeker of 4.1 het wel doet. Vanaf 5 in elk geval wel.

  • Bergie
  • Registratie: Augustus 2000
  • Laatst online: 16-04 14:10

Bergie

Lekker belangrijk...

Mijn SQL is een beetje roestig maar is het niet toevallig zo dat je in het resultaat van die subquery nu probeert te zoeken naar een kolom image_id terwijl die de naam gscmp_image_id heeft?

[ Voor 4% gewijzigd door Bergie op 17-01-2006 20:50 ]

Yamaha MT-09


Verwijderd

Welke versie MySQL? De eerdere versies zullen geen subqueries ondersteunen. Als je het in MySQL wilt oplossen kun je het wel met een (inner) join doen.

  • imp4ct
  • Registratie: November 2003
  • Laatst online: 29-10-2025
Grr.. zit dus met deze versie "MySQL 3.23.58"

Hoe moet ik dit oplossen met een INNER JOIN, mja stomme vraag waarschijnlijk, maar SQL is niet echt m'n sterkste punt, zit ver.

Bedrijf : Webtrix

Foto materiaal:
Nikon D7100 | Nikor AF-S DX 18-105mm | Nikor AF-S 50mm | Nikon SB600


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Een van de oplossingen is een left outer join te doen, en dan te filteren waarbij uit een bepaalde column NULL uitkomt, maar dat moet je dus gedeeltelijk oplossen in je programmeertaal die je mySQL aanroept.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Je moet een LEFT JOIN gebruiken, en dan kijken waar de image_id in tabel site_gscmp_images leeg is.

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • imp4ct
  • Registratie: November 2003
  • Laatst online: 29-10-2025
Beetje zitten prutsen, maar 't gaat niet lukken met een JOIN, want in m'n tabel site_gscmp zitten er 27 items en in de tabel site_gscmp_images zitten er 255, ze hebben dus geen gelijk aantal, wat waarschijnlijk een probleem is bij JOINS.

Bedrijf : Webtrix

Foto materiaal:
Nikon D7100 | Nikor AF-S DX 18-105mm | Nikor AF-S 50mm | Nikon SB600


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Misschien moet je eens opzoeken wat een LEFT JOIN is dan ;)

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

imp4ct schreef op dinsdag 17 januari 2006 @ 21:05:
Beetje zitten prutsen, maar 't gaat niet lukken met een JOIN, want in m'n tabel site_gscmp zitten er 27 items en in de tabel site_gscmp_images zitten er 255, ze hebben dus geen gelijk aantal, wat waarschijnlijk een probleem is bij JOINS.
code:
1
2
3
4
5
6
7
8
9
10
11
id | groepnaam | Pic_ID
100 | A_pic
101 | B_pic
102 | C_pic
103 | D_pic

id | Naam
1 | a
2 | b
3 | c
4 | a2

Resultaat na left (outer) join:
code:
1
2
3
4
5
100 | A_pic | 1 | a
100 | A_pic | 4 | a2
101 | B_pic | 2 | b
102 | C_pic | 3 | c
103 | D_pic | null | null


Ik kijk waar null voorkomt in de id column, dat is bij groepnaam D_pic dus D_Pic heeft geen gerelateerde items in de andere tabel dus in principe hetzelfde wat jij probeert te doen.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Verwijderd

Het verschil tussen een outer join en een inner join is toch dat de NULL-values eruit gefilterd worden? Volgens mij is dat precies wat de TS wil.

Edit: Owneej, de TS wil juist NOT IN.

[ Voor 15% gewijzigd door Verwijderd op 17-01-2006 21:35 ]


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 06-03 20:19

_Thanatos_

Ja, en kaal

Misschien die server maar es updaten? MySQL 3.23 is echt ancient :)

日本!🎌


  • peke
  • Registratie: Februari 2002
  • Laatst online: 15-02 19:28
SELECT DISTINCT image_id, gscmp_id
FROM site_gscmp_images, site_gscmp
WHERE image_id = gscmp_id

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

:?

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

corpseflayer schreef op woensdag 18 januari 2006 @ 00:20:
SELECT DISTINCT image_id, gscmp_id
FROM site_gscmp_images, site_gscmp
WHERE image_id = gscmp_id
Ik weet dat het laat was voor je, maar had je ook de vraagstelling gelezen, zoja, hoe weet hij nu met deze query welke id's niet in de andere tabel gebruikt worden?

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Ik gok eigenlijk dat het zonder subqueries sneller is om een extra query te doen in dit geval, mysql (en zeker versie 3) is geen ster in joins.

In dit geval zou ik het waarschijnlijk gewoon oplossen met 2 queries (als het echt onmogelijk is om te upgraden dan)

Blog [Stackoverflow] [LinkedIn]


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
imp4ct schreef op dinsdag 17 januari 2006 @ 20:54:
Grr.. zit dus met deze versie "MySQL 3.23.58"

Hoe moet ik dit oplossen met een INNER JOIN, mja stomme vraag waarschijnlijk, maar SQL is niet echt m'n sterkste punt, zit ver.
En toen werd Google en meer specifiek de MySQL manual je vriend:
Klik
Jouw situatie wordt vrij precies behandeld. and I quote:
The queries:

SELECT * FROM t1 WHERE id NOT IN (SELECT id FROM t2);
SELECT * FROM t1 WHERE NOT EXISTS (SELECT id FROM t2 WHERE t1.id=t2.id);

Can be also be rewritten using IN():

SELECT table1.* FROM table1
LEFT JOIN table2 ON table1.id=table2.id
WHERE table2.id IS NULL;

  • imp4ct
  • Registratie: November 2003
  • Laatst online: 29-10-2025
My bad. Bedankt voor de oplossing. M'n hosting bedrijf gaat me op een server plaatsen die gebruik maakt van een mySQL 4 versie. De reden dat ze nog in de 3.xxx versie zaten is dat deze versie enorm stabiel is volgens hun, maar goed t'is dus opgelost

Bedank voor de hulp !

[ Voor 4% gewijzigd door imp4ct op 18-01-2006 12:36 ]

Bedrijf : Webtrix

Foto materiaal:
Nikon D7100 | Nikor AF-S DX 18-105mm | Nikor AF-S 50mm | Nikon SB600

Pagina: 1