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

반면, 두 번째 쿼리가 제기 및 오류 : ON 절을 사용할 때 왜 열 abc.c2가 인식되지

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

JOIN 구문?

+5

언제 MySQL이 FULL JOIN 구문을 허용합니까? 내 경험은 FULL JOIN 구문이 지원되지 않는다는 것입니다. – Taryn

+0

첫 번째 쿼리가 실행되는 이유를 모르겠습니다. bluefeet은 mysql이 지적하지 않았기 때문에 - afaik - 완전한 외부 조인을 지원한다. 두 번째 쿼리를 왼쪽 조인 또는 오른쪽 조인으로 변경하면 오류없이 실행됩니다. 좀 더 신비한 것은 첫 번째 쿼리 인 use와 함께 완전 조인이 실제로 실행되는 이유입니다. –

+0

이것은 MySql 관련 버그 인 것으로 보입니다 : 쿼리가 SQL Server ([demo 1] (http://sqlfiddle.com/#!3/10a05/3)) 또는 Oracle ([demo 2] (http://sqlfiddle.com/#!4/e2a21/15)). – dasblinkenlight

답변

11

FULL JOIN은 MySQL에서 지원되지 않습니다. fullabc 테이블의 별칭으로 인식되기 때문입니다. 이 쿼리를 실행하면 오류없이 실행됩니다 :

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

관련 문제