MySQL:基于行之前的查询顺序

时间:2012-10-24 05:57:51

标签: mysql sql select

我有这样的数据库结构:

Insured

+-----------+--------------+-----+
| InsuredID |         Name | ... |
+-----------+--------------+-----+
|         1 |     John Doe | ... |
|         2 |   Bill Gates | ... |
|         3 |   Steve Jobs | ... |
+-----------+--------------+-----+

Accompany

+-------------+-----------+---------------+-----+
| AccompanyID | InsuredID |          Name | ... |
+-------------+-----------+---------------+-----+
|           1 |         1 |    Joanna Doe | ... |
|           2 |         1 |    Johnny Doe | ... |
|           3 |         3 | Steve Ballmer | ... |
+-------------+-----------+---------------+-----+

我怎样才能得到这个结果:

+----------------+-----+
|           Name | ... |
+----------------+-----+
|       John Doe | ... |
|     Joanna Doe | ... |
|     Johnny Doe | ... |
|     Bill Gates | ... |
|     Steve Jobs | ... |
|  Steve Ballmer | ... |
+----------------+-----+

如何将查询的顺序设为 - Insured然后Accompany,其中Accompany.InsuredID等同于Insured.InsuredID Accompany之前的InsuredID = 1 }。它应该这样订购:

  1. John Doe(被保险人)InsuredID = 1
  2. Joanna Doe(陪伴)InsuredID = 1
  3. Johnny Doe(陪伴)InsuredID = 2
  4. 比尔盖茨(被保险人)InsuredID = 3
  5. 史蒂夫乔布斯(被保险人)InsuredID = 3
  6. Steve Balmer(陪伴){{1}}

3 个答案:

答案 0 :(得分:3)

这样的事情应该有效:

select name
from (
 select insuredid, name, 0 ins
 from insured
 union all
 select insuredid, name, 1 ins
 from  accompany) isq
order by insuredid, ins

基本上插入一个假列来标识这些行来自哪个表,然后按insuredid排序,然后按我们的任意表编号排序。

答案 1 :(得分:0)

SELECT 
    * 
FROM (SELECT NAme,.... FROM Insured
      UNION ALL
      SELECT Name,.... FROM Accompany)
ORDER BY Name

答案 2 :(得分:0)

未经测试,类似这样:

SELECT Name 
FROM (
      SELECT InsuredID, Name FROM Insured 
      UNION 
      SELECT InsuredID, Name FROM Accompany
     ) AS t
ORDER BY InsuredID