2014-09-06 74 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