[MySQL] Strengere check dan 'WHERE col IN (...)'

Pagina: 1
Acties:

  • SuperRembo
  • Registratie: Juni 2000
  • Laatst online: 20-08-2025
Ik heb een tabel links, een tabel keywords en een koppeltabel linkkeywords. Nou is het heel eenvoudig om de links te vinden die gekoppeld is aan tenminste een van de keywords met id 1, 2 of 3.
SQL:
1
2
3
4
SELECT DISTINCT l.LinkID, l.Title, l.Url
FROM links l
INNER JOIN linkkeywords lk ON lk.LinkID = l.LinkID
WHERE lk.KeywordID IN (1,2,3)


Maar dat is niet wat ik zoek. Ik wil alleen de links hebben die gekoppeld zijn aan al de opgegevend keywords. Nou lukt dat wel met deze query
SQL:
1
2
3
4
5
6
SELECT l.LinkID, l.Title, l.Url
FROM links l
INNER JOIN linkkeywords lk ON lk.LinkID = l.LinkID
WHERE lk.KeywordID IN (1,2,3)
GROUP BY l.LinkID, l.Title, l.Url
HAVING COUNT(lk.KeywordID)=3

Maar ik heb het gevoel dat het eenvoudiger moet kunnen. Zie ik een simpele oplossing over het hoofd?

| Toen / Nu


  • JaQ
  • Registratie: Juni 2001
  • Laatst online: 14:43

JaQ

SQL:
1
2
3
4
5
6
SELECT DISTINCT l.LinkID, l.Title, l.Url
FROM links l
INNER JOIN linkkeywords lk ON lk.LinkID = l.LinkID
WHERE lk.KeywordID = 1
AND lk.KeywordID = 2
AND lk.KeywordID = 3


Dit lijkt me toch precies aan te geven wat je wilt?

Voor je eerste query had je natuurlijk ook deze query kunnen gebruiken:

SQL:
1
2
3
4
5
6
SELECT DISTINCT l.LinkID, l.Title, l.Url
FROM links l
INNER JOIN linkkeywords lk ON lk.LinkID = l.LinkID
WHERE lk.KeywordID = 1
OR lk.KeywordID = 2
OR lk.KeywordID = 3


Of denk ik nou weer te makkelijk?

Egoist: A person of low taste, more interested in themselves than in me


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

DrFrankenstoner schreef op 31 juli 2004 @ 23:51:
Of denk ik nou weer te makkelijk?
Ja, keywordid kan natuurlijk geen 3 verschillende waarden tegelijk hebben 8)7

[edit]
Voor de TS: je query lijkt de meest eenvoudige oplossing, mogelijk zelfs de enige voor MySQL.

[ Voor 20% gewijzigd door justmental op 31-07-2004 23:57 ]

Who is John Galt?


  • SuperRembo
  • Registratie: Juni 2000
  • Laatst online: 20-08-2025
DrFrankenstoner schreef op 31 juli 2004 @ 23:51:
SQL:
1
2
3
4
5
6
SELECT DISTINCT l.LinkID, l.Title, l.Url
FROM links l
INNER JOIN linkkeywords lk ON lk.LinkID = l.LinkID
WHERE lk.KeywordID = 1
AND lk.KeywordID = 2
AND lk.KeywordID = 3

[...]
Of denk ik nou weer te makkelijk?
Dat zou dan zo moeten
code:
1
2
3
4
5
6
7
8
SELECT DISTINCT l.LinkID, l.Title, l.Url
FROM links l
INNER JOIN linkkeywords lk1 ON lk1.LinkID = l.LinkID
INNER JOIN linkkeywords lk2 ON lk2.LinkID = l.LinkID
INNER JOIN linkkeywords lk3 ON lk3.LinkID = l.LinkID
WHERE lk1.KeywordID = 1
    AND lk2.KeywordID = 2
    AND lk3.KeywordID = 3

Dat lijkt erg praktisch. Hoeveel tables kan je eigenlijk in een join gebruiken?

| Toen / Nu


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

SuperRembo schreef op 31 juli 2004 @ 23:36:
Zie ik een simpele oplossing over het hoofd?
Bij mijn weten niet, je kan wel 3x de keyword-tabel er aan vast joinen, maar daar worden de meeste DB's niet echt vrolijk van als je een keer 5 of 10 keywords wilt selecteren ;)