mysql: где предложение порядка записи в структурах соединения?

0

Предположим, у меня есть три таблицы - 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 в таблице list является идентификатор из a таблице, и

b_id в list таблиц - это идентификатор таблицы b

Мне нужно получить список имен из таблиц a и b упорядоченных по их порядку, где name= 'foo' в таблице list.

то есть. мне нужно получить a_1, a_4 из таблицы a и 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... то есть. Я могу, но я не получу то, что хочу.

Что я могу сделать?

Теги:
sql-order-by

1 ответ

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 ALL быстрее, чем UNION, поскольку он не удаляет дубликаты (что делает UNION).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню