OlafvdSpek schreef op 20 april 2004 @ 18:12:
Weet iemand waarom dit veld in deze query ambiguous is?
code:
1
2
| mysql> select pid from xcl_players inner join xcl_games_players using (pid);
ERROR 1052: Column: 'pid' in field list is ambiguous |
Omdat MySQL zich niet aan de SQL standaard houdt.
Na een INNER JOIN zijn beide velden toch (gegarandeerd) gelijk aan elkaar en is er toch geen sprake van dubbelzinnigheid?
In dit geval van een simpele select niet, maar als je even nadenkt over de definitie van een updateable view kan je vast wel verzinnen waarom het belangrijk is om nog steeds het onderscheid te (kunnen) maken. Alleen hoort door het gebruik van USING die dubbelzinnigheid te verdwijnen.
Hoe het volgens de standaard hoort te werken is als volgt:
code:
1
2
3
4
5
6
7
| Men neme:
CREATE TABLE a (pid VARCHAR(8), naam TEXT);
CREATE TABLE b (pid CHAR(10), plaats TEXT);
SELECT * FROM a INNER JOIN b USING (pid)
Geeft:
pid a.naam b.plaats |
Of pid uit tabel a of tabel b komt is helemaal niet meer zichtbaar. Sterker nog, met de keuze van datatypes zoals hierboven zal de pid kolom in de resultset het datatype VARCHAR(10) moeten hebben, wat anders is dan zowel het datatype van a.pid als dat van b.pid.
Als je applicatie afhankelijk is van dergelijke subtiliteiten in de SQL standaard heb je met MySQL een bijzonder onfortuinlijke keuze gemaakt.