2012-11-16 62 views
0

我试图组合这两个表,然后按一列(stamp)对其进行排序,并对第二个表的id字段进行别名。我试过连接,合并,但似乎没有任何工作。我也试图将它们分组由mm加入并订购两个具有相同列的表

note

id | mm | stamp | 
========================== 
    1 | 5 | 2009-12-11 | 
    2 | 33 | 2010-09-10 | 
    3 | 22 | 2011-07-08 | 
    4 | 1 | 2012-05-06 | 

note_admin

id | mm | stamp | 
========================== 
    1 | 5 | 2009-08-15 | 
    2 | 5 | 2011-11-11 | 
    3 | 5 | 2012-01-08 | 
    4 | 35 | 2012-02-06 | 

查询我想会的工作:

(SELECT * FROM note WHERE mm=5) 
UNION 
(SELECT id AS a_id, mm, stamp FROM note_admin WHERE mm=5) 
ORDER BY stamp DESC 

预期结果

id | a_id | mm | stamp | 
================================ 
    | 3 | 5 | 2012-01-08 | 
    | 2 | 5 | 2011-11-11 | 
    1 |  | 5 | 2009-12-11 | 
    | 1 | 5 | 2009-08-15 | 

我甚至不知道这是否可能。我找到了一种在PHP中对它进行排序的方法,但如果它可以在mySQL中完成,它会容易得多。谢谢。

+0

字段名称必须相同。 SELECT * FROM in ... –

+0

@Glavić与之相反 - 在UNION查询中不选择SELECT *。始终要明确说明列顺序! –

+0

如果表是相同的,则不需要。 –

回答

0

我想你的意思是这样,(通过永远不能确定有关订单)注意,同4个名:

(SELECT a_id as NULL, note.* FROM note WHERE mm=5) UNION (SELECT id AS a_id, NULL as id, mm, stamp FROM note_admin WHERE mm=5) ORDER BY stamp DESC 
+0

这似乎工作: (SELECT null作为a_id,id,mm,戳记从注意WHERE mm = 5)UNION(SELECT id AS a_id,NULL作为id,mm,stamp FROM note_admin WHERE mm = 5)ORDER BY stamp DESC –

+0

'ORDER BY'是好的。 MySQL手册说:要使用ORDER BY或LIMIT子句排序或限制整个UNION结果,请将单个SELECT语句括起来,并在最后一个之后放置ORDER BY或LIMIT。 –

相关问题