2014-10-06 75 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

相关问题