2015-08-21 68 views
-3

聯合表中有沒有辦法忽略第一個選擇列順序並按列名匹配記錄?與聯盟的SQL select語句列順序

就拿這一點:

// TEST1 table: 
| a | b | 
------------- 
| 3 | 5 | 

// TEST2 table: 
| b | a | 
------------- 
| 4 | 9 | 

select a, b from TEST1 union (select b, a from TEST2) 

// The result must be a table like the on below: 
| a | b | 
------------- 
| 3 | 5 | 
------------- 
| 9 | 4 | 

// BUT, actually is: 
| a | b | 
------------- 
| 3 | 5 | 
------------- 
| 4 | 9 | 

UPDATE:

列和其數量的名稱是相同的,只是順序不同,我不能改變第二選擇列順序。

我要求的方式來忽略默認的SQL UNION行爲,並告訴它相匹配的列名,不及格

+0

我的列名和編號是一樣的,只是不能保證他們的順序。 – nevermind

+0

我無法更改第二個選擇列順序...如果我有這個選項,我不會要求 – nevermind

回答

2

UNION沒有這種功能。

你必須找到例如一個解決辦法:

select concat('a',a) as a, concat('b',b) as b from TEST1 union (select concat('b',b) as b, concat('a',a) as a from TEST2) 

您將有類似的東西:

| a | b | 
------------- 
| a3 | b5 | 
------------- 
| b4 | a9 | 

然後你可以分析它,並通過編程重新排序。

-1

在表中字段的順序是無關緊要的順序。這是您指定聯盟的子查詢中的字段的順序。

目前您有:

select a, b from TEST1 
union  | | 
    select b, a from TEST2) 

當它應該是

select a, b from TEST1 
union  | | 
    select a, b from TEST2 

唯一一次場序表定義會的問題是,如果你在做select *

+0

更新我的問題 – nevermind