2017-03-09 24 views
0

我有兩個完全不同的列的表。例如:從單獨的表和沒有共同的字段的MySQL結果

A:      B: 
+-----+-------+------+ +------+------+-------+-------+ 
| id | price | name | | key | cost | title | color | 
+-----+-------+------+ +-----+-------+-------+-------+ 
| 123 | 10.00 | Boat | | 456 | 12.00 | Ship | red | 
+-----+-------+------+ +-----+-------+-------+-------+ 
| 124 | 8.00 | Car | | 457 | 5.00 | Truck | blue | 
+-----+-------+------+ +-----+-------+-------+-------+ 

我不知道是否有返回維護自己獨立的數據列一個結果集的方式,但投下了一個共同的價值通過訂購的結果。例如,通過訂貨成本/價格:

[1] key = 456 cost = 12.00 title = Ship color = red 
[2] id = 123 price = 10.00 name = Boat 
[3] id = 124 price = 8.00 name = Car 
[4] key = 457 cost = 5.00 title = Truck color = blue 

因爲我不想加入,沒有任何公共列的UNION,反正是有做這樣的事情?

編輯:

我要指出,在我的實際情況表包含更多的列。隨着聯盟,這聽起來像我將不得不顯式地映射這些列給對方,這是不完全理想給出的列數...

+2

'UNION'不需要公共列名稱,只是列數相同。你可以在其中一個'UNION'中使用列別名來賦予它們相同的名字,但即使你沒有,你也可以通過'UNION'上半部分的列名來排序。 –

+0

@MichaelBerkowski在我的實際情況中,一個表的列數遠遠少於另一個。我將如何處理這種差異? – HWD

+0

對我來說看起來像是一個'UNION ALL'操作。目前還不清楚結果集究竟應該是什麼樣子,您是否真的需要方括號中的行號,'key =','price ='等。文字?每個查詢只需要返回相同數量的列,並使用相同的數據類型。如果在其中一個查詢中有「缺少」列,則可以在SELECT中添加佔位符文字。 – spencer7593

回答

0

所有字段實際上是共同Key/IDprice/cost是數字和title/name都是字符串。

我想在這裏唯一的解決辦法是使用UNION運營商和別名的列名相互匹配,並採用更通用的別名,而不是cost/pricetitle/name

1

要得到一個返回的結果集,我們可以使用兩個查詢的一個UNION ALL設置操作。列的數量和列的數據類型需要匹配。我們可以使用任何表達式,包括文字。

SELECT v.* 
    FROM (SELECT 'key = ' AS col1 
       , b.key  AS col2 
       , 'cost = ' AS col3 
       , b.cost  AS col4 
       , 'title = ' AS col5 
       , b.title  AS col6 
       , 'color =' AS col7 
       , b.color  AS col8 
      FROM B b 
      UNION ALL 
     SELECT 'id = '  AS col1 
       , a.id  AS col2 
       , 'price = ' AS col3 
       , a.price  AS col4 
       , 'name = ' AS col5 
       , a.name  AS col6 
       , ''   AS col7 
       , ''   AS col8 
      FROM A a 
     ) v 
    ORDER BY v.col4 DESC 

經常使用這種類型的UNION ALL結果,我們感興趣的是哪個查詢返回的行,所以包括附加列鑑別是一種常見的模式。

我這個例子中,我們可以使用col1,因爲這將包含行'key ='從B排燈,以及'id ='從A

注意,對於A中的「失蹤」欄目,我們只是使用一個包含在SELECT列表中的佔位符字面值將返回col7和col8的值,所以列和數據類型的數量將匹配。

相關問題