2014-09-06 77 views
7

我和朋友在玩MySQL中的JOIN子句。下面是表的結構有:完全連接語法中的未知列錯誤

create table abc 
(
    c1 int, 
    c2 char(1) 
); 
create table xyz 
(
    c2 char(1), 
    c3 varchar(5) 
); 

插入其中的值是:

insert into abc 
values 
    (1,"a"), 
    (2,"b"); 
insert into xyz 
values 
    ("a","apple"), 
    ("c","car"); 

現在,我有following two SQL statements(sqlfiddle link):

select 
    *, 
    'full' 
from abc 
full join xyz 
    using (c2); 

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

如在小提琴可以看出,第一個查詢返回:

| C2 | C1 | C3 | FULL | 
|----|----|-------|------| 
| a | 1 | apple | full | 

而第二查詢提升和錯誤:

Unknown column 'abc.c2' in 'on clause': 

爲什麼列abc.c2使用的ON條款時不能識別JOIN語法?

+5

當heck做了MySQL啓動允許FULL JOIN語法?我的經驗是不支持FULL JOIN語法。 – Taryn 2014-09-06 16:40:06

+0

我不知道爲什麼第一個查詢甚至運行;正如bluefeet指出的那樣,mysql不支持 - afaik - 支持完整的外連接。如果將第二個查詢更改爲左連接或右連接,則它會正常運行。更神祕的是爲什麼第一個查詢,完全連接使用,實際運行。 – 2014-09-06 16:42:36

+0

這似乎是特定於MySql的錯誤:當您的查詢再次運行SQL Server([demo 1](http://sqlfiddle.com/#!3/10a05/3))或Oracle([demo 2]( http://sqlfiddle.com/#!4/e2a21/15))。 – dasblinkenlight 2014-09-06 16:53:14

回答

11

FULL JOIN不受MySQL支持。這是因爲full被識別爲abc表的別名。試試這個查詢,它運行沒有錯誤:

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

在當前的MySQL(5.7.x)中,FULL甚至不是[保留字](https://dev.mysql.com/doc/refman/5.7/en/reserved-words.html),這很奇怪。 – VMai 2014-09-06 16:50:09