2014-09-06 12 views
7

Một người bạn và tôi đang chơi với các mệnh đề JOIN có sẵn trong MySQL. Dưới đây là cấu trúc bảng ta có:Lỗi cột không xác định trong cú pháp tham gia đầy đủ

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

Các giá trị đưa vào số đó là:

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

Bây giờ, tôi có 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; 

Như có thể thấy trong fiddle, truy vấn đầu tiên trả về:

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

thời gian, truy vấn thứ hai đặt ra và báo lỗi:

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

Tại sao cột abc.c2 không được công nhận khi sử dụng ON khoản của Cú pháp JOIN?

+5

Khi nào thì MySQL bắt đầu cho phép cú pháp FULL JOIN? Kinh nghiệm của tôi là cú pháp FULL JOIN không được hỗ trợ. – Taryn

+0

Tôi không biết tại sao truy vấn đầu tiên lại chạy; như bluefeet chỉ ra mysql không - afaik - hỗ trợ các kết nối bên ngoài đầy đủ. Nếu bạn thay đổi truy vấn thứ hai để tham gia trái hoặc phải tham gia nó chạy mà không có lỗi. Điều bí ẩn hơn là tại sao truy vấn đầu tiên, tham gia đầy đủ với việc sử dụng, thực sự chạy. –

+0

Điều này dường như là một lỗi cụ thể đối với MySql: khi truy vấn của bạn được chạy lại SQL Server ([demo 1] (http://sqlfiddle.com/#!3/10a05/3)) hoặc Oracle ([demo 2] (http://sqlfiddle.com/#!4/e2a21/15)). – dasblinkenlight

Trả lời

11

FULL JOIN không được MySQL hỗ trợ. Đó là vì full được công nhận là bí danh cho bảng abc. Hãy thử truy vấn này, nó chạy mà không có lỗi:

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

Thật lạ khi FULL không phải là [từ dành riêng] (https://dev.mysql.com/doc/refman/5.7/en/reserved-words.html) trong MySQL hiện tại (5.7.x). – VMai

Các vấn đề liên quan