mysql:连接结构中的write order子句在哪里?

时间:2010-09-23 16:59:49

标签: sql mysql sql-order-by

我们假设我有三个表 - listab

table list
|a_id|--|b_id|--'name'
|4   |--|3   |--|foo|
|1   |--|2   |--|foo|

table a
|id|--|name|--|order|
|1 |--|a_1 |--|1    |
|2 |--|a_2 |--|2    |
.....................
|n |--|a_n |--|n    |

table b
|id|--|name|--|order|
|1 |--|b_1 |--|1    |
|2 |--|b_2 |--|2    |
.....................
|n |--|b_n |--|n    |
a_id中的

list是来自a表的ID,

b_id中的

list是来自b

的ID

我需要从他们的订单排序的ab表中获取名称列表,其中name ='foo'在list表中。

即。我需要从表a_1获取a_4a,从b_2获取b_3b

我写了一个像

这样的查询
SELECT
                    `a_1_table`.`name` a_1_name,
                    `b_1_table`.`name` b_1_name
                FROM
                    `list`
                LEFT JOIN 
                    `a_1` AS a_1_table ON ( `a_1_table`.`id` = `list`.`a_id` )
                LEFT JOIN 
                    `b_1` AS b_1_table ON ( `b_1_table`.`id` = `list`.`b_id` )
                WHERE 
                    `list`.`name` = 'foo'

但正如我所见,在这种结构中,我无法写order by ...。即。我可以'但我不会得到我想要的东西。

我该怎么办?

1 个答案:

答案 0 :(得分:1)

使用:

SELECT x.name
    FROM (SELECT a.name, a.order, 1 AS sort
            FROM LIST l
            JOIN a ON a.id = list.a_id
          WHERE l.name = 'foo'
          UNION ALL
          SELECT b.name, b.order, 2 AS sort
            FROM LIST l
            JOIN b ON b.id = list.b_id
           WHERE l.name = 'foo') x
ORDER BY x.sort, x.order

UNION ALLUNION快,因为它不会删除重复项(UNION会这样做。)