[SQL] 2x dezelfde tabel joinen

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

  • Paul C
  • Registratie: Juni 2002
  • Laatst online: 10:55
Ik heb een database met twee tabellen:
artists:
- id (int)
- name (varchar)
- updated (int)
similar:
- id (int) // artiest a
- to (int) // lijkt op artiest b
- similarity (tinyint) // voor c%

Van die getallenzee uit de similar tabel word ik geen wijs, dus wil ik graag de artists tabel aan m'n similar tabel knopen.

Ik probeer dit (en wat varianten erop):
SQL:
1
2
3
SELECT * FROM similar
INNER JOIN artists ON similar.id = artists.id
INNER JOIN artists ON similar.`to` =artists.id


Maar dan krijg ik dit:
#1066 - Not unique table/alias: 'artists'

Ik heb ook al naar dingen als aliassen gezocht, maar dat leverde mij niets nuttigs op.

Hoe krijg ik het voor elkaar dat MySQL nu twee artiestennamen en een gelijkingspercentage per row retourneert?

  • Mike78
  • Registratie: September 2000
  • Laatst online: 13:33

Mike78

Always

Je moet er zo iets van maken
SQL:
1
2
3
SELECT * FROM similar s
INNER JOIN artists a1 ON s.id = a1.id
INNER JOIN artists a2 ON s.`to` =a2.id


Er staat nu 2 keer de verwijzing artists en dat snapt hij niet.

[ Voor 4% gewijzigd door Mike78 op 28-12-2006 00:10 ]

24 uur per dag, 24 biertjes in een krat. Toeval?


  • Paul C
  • Registratie: Juni 2002
  • Laatst online: 10:55
Mike78 schreef op donderdag 28 december 2006 @ 00:09:
Je moet er zo iets van maken
SQL:
1
2
3
SELECT * FROM similar s
INNER JOIN artists a1 ON s.id = a1.id
INNER JOIN artists a2 ON s.`to` =a2.id


Er staat nu 2 keer de verwijzing artists en dat snapt hij niet.
Ja, het was toch iets anders, maar met een beetje van jou en een beetje van MySQL-manual kwam ik hier op:
SQL:
1
2
3
SELECT t1.name, t2.name, similar.similarity FROM similar
INNER JOIN artists AS t1 ON similar.id = t1.id
INNER JOIN artists AS t2 ON similar.`to` = t2.id


En dat werkt!
Bedankt! O+

  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
waarom gebruik je de term inner join?
dit is toch exact hetzelfde als:

select * from tbl1, tbl2 where tbl1.key = tbl2.key?

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Mischa_NL schreef op donderdag 28 december 2006 @ 01:26:
waarom gebruik je de term inner join?
Omdat dat de "juiste term" is en jouw "term" "niet" omdat je met de "inner join methode" expliciet aangeeft wat voor join je wil ;)

Voor de duidelijkheid: écht "fout" is het niet, maar het leest IMHO makkelijker ("self-documenting") en is explicieter.

[ Voor 42% gewijzigd door RobIII op 28-12-2006 01:50 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij