2014-09-06 14 views
7

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?

+5

Quando diavolo MySQL ha iniziato a consentire la sintassi FULL JOIN? La mia esperienza è che la sintassi FULL JOIN non è supportata. – Taryn

+0

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. –

+0

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

risposta

11

FULL JOIN non è supportato da MySQL. È perché full viene riconosciuto come alias nella tabella abc. Prova questa query, funziona senza errori:

select 
    *, 
    'full' 
from abc 
full join xyz 
    on full.c2 = xyz.c2; 
+5

È strano che FULL non sia nemmeno una [parola riservata] (https://dev.mysql.com/doc/refman/5.7/en/reserved-words.html) nell'attuale MySQL (5.7.x). – VMai

Problemi correlati