假设我有三个表 - 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 |
表list
中的a_id
是来自a
表的id,并且
list
中的b_id
是来自b
表的id
我需要从 a
和 b
表中获取按顺序排序的姓名列表,其中 name
= 'foo' in 列出
表。
即。我需要从表 a
和 b_2
、b_3
中获取 a_1
、a_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 ALL
比 UNION
更快,因为它不会删除重复项(UNION
会删除重复项)。
关于sql - mysql:连接结构中的顺序子句写在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3780751/