[MySQL]Query op 1 veld op meerde gegeven waarden checken

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

Ik zit met het volgende probleem, mijn sql is niet erg sterk en kan helaas geen oplossing vinden in de boeken of op het internet.

Ik kan mijn issue het beste met een voorbeeld aangeven, dus let even niet op de nonsens die er staat..:D

Ik heb twee tabellen:

Tabel1
code:
1
2
3
4
5
ID     Desc
1      MEN
2      Broek
3      Geel
4      Rib


Tabel2
code:
1
2
3
4
ID    Name   Desc
1     Bla1   MEN;Geel;Rib
2     Bla2   Broek;Rib
3     Bla3   MEN; Broek;Geel


Bijvoorbeeld de volgende query:
SQL:
1
Select Desc FROM Tabel1 WHERE Desc='MEN' OR Desc='Broek' OR Desc='Geel'

Nu wil elk resultaat van deze query vergelijken met elke row op de Desc kolom van Tabel2.
Dus iets van:
SQL:
1
SELECT ID FROM Tabel2 WHERE Desc LIKE '%{each result eerste query}%'

Bovenstaande query is natuurlijk onzin, maar kan dit met SQL opgelost worden?

Acties:
  • 0 Henk 'm!

  • Mangeloos
  • Registratie: Februari 2003
  • Laatst online: 05-09 10:36
Zo bijvoorbeeld:


Bijvoorbeeld de volgende query:
SQL:
1
Select Desc FROM Tabel1 WHERE Desc='MEN' OR Desc='Broek' OR Desc='Geel'

Nu wil elk resultaat van deze query vergelijken met elke row op de Desc kolom van Tabel2.
Dus iets van:
SQL:
1
SELECT ID FROM Tabel2 WHERE Desc IN(Select Desc FROM Tabel1 WHERE Desc='MEN' OR Desc='Broek' OR Desc='Geel')

[ Voor 13% gewijzigd door Mangeloos op 30-10-2009 17:52 . Reden: foutje in queyr ]


Acties:
  • 0 Henk 'm!

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 18-08 21:31
Mocht je nog in de ontwerpfase van je project zitten, doe dan de kolom desc in een derde (koppel) tabel tussen tabel 1 en 2. Dan wordt de query om de juiste gegevens er uit te halen een stuk makkelijker.

[ Voor 24% gewijzigd door _js_ op 30-10-2009 17:55 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@Mangeloos
Het veld Desc in Tabel2 heeft meerde waarden gescheiden door een ';'.
Jou query zal altijd 0 opleveren omdat bijvoorbeeld 'MEN;Geel;Rib' nooit in 'MEN' kan zitten. Ik kom er niet onderuit om een LIKE te gebruiken denk ik.


@_js_
Ik snap wat je bedoeld, maar ik kom er niet onderuit om meerdere waarden te checken tegen 1 veld van 1 record.

Acties:
  • 0 Henk 'm!

  • KompjoeFriek
  • Registratie: Maart 2001
  • Laatst online: 15-08 22:46

KompjoeFriek

Statsidioot

Verwijderd schreef op vrijdag 30 oktober 2009 @ 18:36:
@_js_
Ik snap wat je bedoeld, maar ik kom er niet onderuit om meerdere waarden te checken tegen 1 veld van 1 record.
Ik begrijp niet wat je daar mee bedoelt. :)

ff voorbeeldje van opsplitsing:
Tabel1
code:
1
2
3
4
5
ID     Desc
1      MEN
2      Broek
3      Geel
4      Rib


Tabel2
code:
1
2
3
4
ID    Name
1     Bla1
2     Bla2
3     Bla3


Tabel3
code:
1
2
3
4
Tabel1ID    Tabel2ID
1           1
2           1
3           3


En bijvoorbeeld de volgende query:
SQL:
1
2
3
4
5
SELECT Tabel2.name, Tabel1.`Desc` 
FROM Tabel1, Table2, Table3
WHERE Table2.ID = Table3.Table2ID
AND Table3.Table1ID = Table1.ID
AND `Desc` in ('MEN', 'Broek', 'Geel')


En vergeet alsjeblieft niet dat desc een reserved word is ;)

WhatPulse! - Rosetta@Home - Docking@Home


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Verwijderd schreef op vrijdag 30 oktober 2009 @ 18:36:
@Mangeloos
Het veld Desc in Tabel2 heeft meerde waarden gescheiden door een ';'.
Jou query zal altijd 0 opleveren omdat bijvoorbeeld 'MEN;Geel;Rib' nooit in 'MEN' kan zitten. Ik kom er niet onderuit om een LIKE te gebruiken denk ik.


@_js_
Ik snap wat je bedoeld, maar ik kom er niet onderuit om meerdere waarden te checken tegen 1 veld van 1 record.
De bottomline is: comma seperated opslaan is vrijwel nooit de oplossing, ieder geval sowieso niet nu ;) Je zit namelijk nu al klem op iets heel simpels. Lees je eens in over normalisatie :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Je hebt helemaal gelijk. Ik zal een koppeltabel aanmaken tussen de prodcucten en descriptions zodanig dat producten meerdere descriptions hebben.
Ik heb ook al een idee hoe ik dit tijdens het importeren voor elkaar kan krijgen.

Dank je wel voor je hulp.
Pagina: 1