[MySQL5] Join is niet toegestaan

Pagina: 1
Acties:

  • mosymuis
  • Registratie: Maart 2002
  • Laatst online: 07-01 19:39
code:
1
2
3
4
5
6
7
SELECT cat.cat_type, cat.cat_titel, prt.cat_titel AS prt_titel, vrt.vrt_id, vrt.vrt_titel
FROM leg_categorie cat, leg_vertaling vrt
LEFT JOIN leg_categorie prt ON prt.cat_id = cat.cat_parent
WHERE vrt.vrt_categorie = cat.cat_id
AND vrt.vrt_actief = 'ja'
ORDER BY vrt_toegevoegd_datum DESC
LIMIT 0, 10;

De query spreekt waarschijnlijk wel voor zich; het haalt 10 records op met bijbehorende categorie, en waar aanwezig ook de naam van de parent catagorie (hoofdcategorie). Werkte prima, en ziet er voor mij ook logisch uit, maar MySQL5 slikt hem niet.

Error: Unknown column 'cat.cat_parent' in 'on clause' (en ja, natuurlijk bestaat die kolom)

Blijkbaar mag ik een tabel dus niet een tweede maal op deze manier koppelen, maar hoe moet het dan wel? :?

[ Voor 3% gewijzigd door mosymuis op 16-02-2006 00:48 ]


  • intermusic
  • Registratie: September 2002
  • Laatst online: 25-03-2025

intermusic

Marc Hoekstra

LEFT JOIN leg_categorie prt ON prt.cat_id = cat.cat_parent
Wat doet die lossen prt daar, omgeven door spaties?

[ Voor 78% gewijzigd door intermusic op 16-02-2006 00:57 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 17:49

NMe

Quia Ego Sic Dico.

intermusic schreef op donderdag 16 februari 2006 @ 00:56:
LEFT JOIN leg_categorie prt ON prt.cat_id = cat.cat_parent
Wat doet die lossen prt daar, omgeven door spaties?
Dat is een impliciete alias. Dit doet hetzelfde:
SQL:
1
LEFT JOIN leg_categorie AS prt ON prt.cat_id = cat.cat_parent

mosymuis: herschrijf die impliciete inner join eens naar een expliciete inner join, waarschijnlijk is dat het probleem. En zelf geef ik trouwens de voorkeur aan het gebruik van AS voor aliassen, dat is toch net iets duidelijker, zoals je hierboven al merkt. :P

[ Voor 28% gewijzigd door NMe op 16-02-2006 01:03 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • mosymuis
  • Registratie: Maart 2002
  • Laatst online: 07-01 19:39
Ach verrek, dat werkt, tnx! :) Gek dat ik hier al aan gewend was tijdens mijn werk met MS SQL Server, maar dat het niet in me opkwam dit nu ook te proberen. Blijkbaar is MySQL5 een stuk minder tolerant dan zijn voorganger?

  • intermusic
  • Registratie: September 2002
  • Laatst online: 25-03-2025

intermusic

Marc Hoekstra

Wow, het was zelfs een klein gokje van mij zeg!
Lekker AS gebruiken dus!

  • mosymuis
  • Registratie: Maart 2002
  • Laatst online: 07-01 19:39
intermusic schreef op donderdag 16 februari 2006 @ 01:14:
Wow, het was zelfs een klein gokje van mij zeg!
Lekker AS gebruiken dus!
Nee, het lag aan het schrijven als INNER JOIN (NME's tip), met mijn syntax was niets mis. ;)

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 17:49

NMe

Quia Ego Sic Dico.

mosymuis schreef op donderdag 16 februari 2006 @ 01:13:
Blijkbaar is MySQL5 een stuk minder tolerant dan zijn voorganger?
Dat heeft niet te maken met tolerantie denk ik, maar eerder met de volgorde waarop je query verwerkt wordt. Blijkbaar wordt eerst de left join verwerkt, en later pas de impliciete inner join, mogelijk omdat de "on-clause" daarbij pas in het WHERE-gedeelte staat. Met een expliciete inner join forceer je gewoon een vaste volgorde en kent hij dus de alias die je aanmaakt wèl. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • mosymuis
  • Registratie: Maart 2002
  • Laatst online: 07-01 19:39
Makes sense, maar dat neemt niet weg dat dezelfde quey wel liep onder MySQL4 ;)
Pagina: 1