sql - mysql:连接结构中的顺序子句写在哪里?

标签 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    |
list中的

a_id是来自a表的id,并且

list中的

b_id是来自b表的id

我需要从 ab 表中获取按顺序排序的姓名列表,其中 name = 'foo' in 列出表。

即。我需要从表 ab_2b_3 中获取 a_1a_4来自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 ...。 IE。我可以,但我不会得到我想要的。

我能做什么?

最佳答案

用途:

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 会删除重复项)。

关于sql - mysql:连接结构中的顺序子句写在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3780751/

相关文章:

mysql - 使用变量并重用它时,SELECT 语句无法正确显示数据

mysql - phpMyAdmin 导出数据库

mysql 使用包含变量的 mysql 查询创建 View

php - 是否可以添加一个链接,在单击时会登录用户?

php - 将自定义数据库与 Wordpress 集成

sql - Sql Server 中带有 Union 的 Order by 子句

MySQL 正确比较和排除结果

php - 使用 Doctrine 和 Symfony 插入数据库 - 外键不插入

java - 在 HQL order by 子句中处理 SQL 注入(inject)

php - 如何使用 Eloquent 和 MySQL 按 last id 对分组结果进行排序?