2014-10-06 72 views
0

我有兩個表是完全不同的字段和數據,但我想從兩個表中排序的數據。爲此我使用了union子句,並且我成功地獲取結果集但無法對數據進行排序。我嘗試了很多技巧,但都失敗了。排序在mysql中的兩個表的聯合結果集

我查詢 -

(SELECT amount FROM `purchase` order by amount desc limit 0, 10) 
UNION 
(SELECT total_price as amount from `item` order by total_price desc limit 0, 10) order by amount desc 

結果是 -

----------- 
amount 
----------- 
9999.000 
9998.000 
999.000 
9730 
7750 
7700 
7600 
6881 
20000 
13400 
10250 
10000 

結果是確定的,但你可以看到,數據不排序量,它是由表排序。但是我想在最高處即20000等等。任何人都可以告訴我在查詢中必須做什麼更改才能達到結果。

回答

0

看來,一個(或兩個)amounttotal_price是文本類型。如何投這樣的:

(SELECT amount + 0 AS amount FROM `purchase` order by amount desc limit 0, 10) 
UNION 
(SELECT total_price + 0 AS amount from `item` order by total_price desc limit 0, 10) 
ORDER BY amount desc 

如果xxx + 0不能正常工作,使用CAST(total_price AS SIGNED INTEGER)

+0

在此之前,請你解釋我。這裏+ 0在做什麼以及它如何影響我的數據? @ InoS Heo – 2014-10-06 07:09:36

+0

@ThePlusProgrammer這是在MySQL(或PHP)中不強制嚴格數據類型的常見技巧。使用'CAST()'函數是轉換數據類型的標準方法。 – 2014-10-06 07:13:11

+0

amount是varchar類型,total_price是int型 – 2014-10-06 07:13:33

0

嘗試此查詢:

SELECT * 
FROM  ( 
      SELECT cast(amount AS DECIMAL(10,2)) as amount 
      FROM `purchase` limit 0, 10 
      UNION 
      SELECT total_price AS amount 
      FROM `item` limit 0, 10) a 
ORDER BY amount DESC 

SAMPLE DEMO

+0

對不起@Manwal未完成。所有排序結果總是錯過匹配 – 2014-10-06 06:27:48

+0

如何創建一個[SqlFiddle](http://sqlfiddle.com/)? – Manwal 2014-10-06 06:31:51

+0

用非常簡單的話來說就是一個查詢來實現這一點,一個表中的一些數據和一些來自第二個表的數據通過limit子句,將所有的數據和排序結果合併爲最高值。 – 2014-10-06 06:36:47

相關問題