代码之家  ›  专栏  ›  技术社区  ›  Simon

mysql:连接结构中的where write order子句?

  •  0
  • Simon  · 技术社区  · 16 年前

    list a 和 b

    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 列表 id来自 一

    b_id 在表中 id来自 b类

    我要从你的办公室拿到名单 一 name 列表

    例如,我需要 a_1 , a_4 从表 ,和 b_2 , b_3 b类

    我写了一个类似

    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 回复  |  直到 7 年前
        1
  •  1
  •   OMG Ponies    16 年前

    用途:

    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 ALL 比…快 UNION 工会 是的)。