2008-11-26 30 views
8

Cho một vài bảng đơn giản như vậy:tên cột cho một bảng hình thành bởi một UNION

create table R(foo text); 
create table S(bar text); 

Nếu tôi được đoàn chúng lại với nhau trong một truy vấn, những gì tôi gọi là cột?

select T.???? 
from (
    select foo 
    from R 
    union 
    select bar 
    from S) as T; 

Bây giờ, trong mysql, tôi có thể tham chiếu cột T là 'foo' - tên của cột khớp cho mối quan hệ đầu tiên trong liên minh. Trong sqlite3, tuy nhiên, điều đó dường như không hoạt động. Có cách nào để làm điều đó đó là tiêu chuẩn trên tất cả các triển khai SQL?

Nếu không, làm thế nào về chỉ cho sqlite3?

Chỉnh sửa: sqlite3 cho phép bạn tham khảo cột của T là 'foo' sau khi tất cả! Rất tiếc!

Trả lời

11

Mặc dù không có quy tắc đánh vần, chúng tôi có thể sử dụng tên cột từ truy vấn phụ đầu tiên trong truy vấn kết hợp để tìm nạp kết quả công đoàn.

12

Cố gắng cung cấp bí danh cho các cột;

select T.Col1 
from (
    select foo as Col1 
    from R 
    union 
    select bar as Col1 
    from S) as T; 

hoặc Nếu tên cột không cần thiết thì T. * sẽ là đủ.

+0

Mã của bạn Nhóm kết quả bởi 'Col1', tại sao? – kicaj

5

bạn chỉ cần bí danh cột chỉ trong lần đầu tiên chọn (thử nghiệm trong SQL Server 2008 R2)

select T.Col1 
from (
    select 'val1' as Col1 
    union 
    select 'val2' 
    union 
    select 'val3'  
) as T; 
Các vấn đề liên quan