完整连接语法中的未知列错误

hjp*_*r92 7 mysql sql join

我和朋友正在玩JOINMySQL中的条款.这是我们的表结构:

create table abc 
(
  c1 int,
  c2 char(1)
);
create table xyz
(
  c2 char(1),
  c3 varchar(5)
);
Run Code Online (Sandbox Code Playgroud)

插入其中的值为:

insert into abc
values
  (1,"a"),
  (2,"b");
insert into xyz
values
  ("a","apple"),
  ("c","car");
Run Code Online (Sandbox Code Playgroud)

现在,我有以下两个SQL语句(sqlfiddle 链接):

select
  *,
  'full'
from abc
full join xyz
  using (c2);
Run Code Online (Sandbox Code Playgroud)

select
  *,
  'full'
from abc
full join xyz
  on abc.c2 = xyz.c2;
Run Code Online (Sandbox Code Playgroud)

从小提琴中可以看出,第一个查询返回:

| C2 | C1 |    C3 | FULL |
|----|----|-------|------|
|  a |  1 | apple | full |
Run Code Online (Sandbox Code Playgroud)

而第二个查询引发错误:

Unknown column 'abc.c2' in 'on clause':
Run Code Online (Sandbox Code Playgroud)

为什么abc.c2在使用语法ON子句时无法识别列JOIN

Rim*_*mas 11

FULL JOINMySQL不支持.这是因为full被识别为abc表的别名.试试这个查询,它运行没有错误:

select
  *,
  'full'
from abc
full join xyz
  on full.c2 = xyz.c2;
Run Code Online (Sandbox Code Playgroud)

  • 在当前的MySQL(5.7.x)中,FULL甚至不是[保留字](https://dev.mysql.com/doc/refman/5.7/en/reserved-words.html),这很奇怪. (5认同)