Un amico e io stavamo giocando con le clausole JOIN
disponibili in MySQL. Ecco la struttura della tabella abbiamo:Errore colonna sconosciuto nella sintassi completa join
create table abc
(
c1 int,
c2 char(1)
);
create table xyz
(
c2 char(1),
c3 varchar(5)
);
I valori inseriti in esse sono:
insert into abc
values
(1,"a"),
(2,"b");
insert into xyz
values
("a","apple"),
("c","car");
Ora, ho la following two SQL statements (sqlfiddle link):
select
*,
'full'
from abc
full join xyz
using (c2);
e
select
*,
'full'
from abc
full join xyz
on abc.c2 = xyz.c2;
Come può essere visto nel violino, la prima query restituisce:
| C2 | C1 | C3 | FULL |
|----|----|-------|------|
| a | 1 | apple | full |
mentre, la seconda query genera ed errori:
Unknown column 'abc.c2' in 'on clause':
Perché la colonna abc.c2
non riconosciuto quando si utilizza la clausola ON
di Sintassi JOIN
?
Quando diavolo MySQL ha iniziato a consentire la sintassi FULL JOIN? La mia esperienza è che la sintassi FULL JOIN non è supportata. – Taryn
Non so perché venga eseguita la prima query; come ha sottolineato bluefeet, mysql non supporta - afaik - il supporto di tutti i join esterni. Se si modifica la seconda query in join sinistro o destro, viene eseguita senza errori. La cosa più misteriosa è il motivo per cui la prima query, full join with using, viene effettivamente eseguita. –
Questo sembra essere un bug specifico per MySql: quando la query viene eseguita nuovamente SQL Server ([demo 1] (http://sqlfiddle.com/#!3/10a05/3)) o Oracle ([demo 2] (http://sqlfiddle.com/#!4/e2a21/15)). – dasblinkenlight