|
Сортировка по результатам подзапроса
|
|||
---|---|---|---|
#18+
Есть запрос примерно такого вида: select * from table1 where field1 in (select field1 from table2 order by field2) Подзапрос возвращает значения в определенном порядке, отсортированные по field2. Как сделать так чтобы основной запрос тоже выводил значения отсортированные по результатам подзапроса? Эм.. немного туманно получилось в общем если подзапрос вернет "5", "1", "3" - то нужно чтобы и основной запрос выводил сначала те строки в которых field1=5 потом, field1=1 и наконец field1=3 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2001, 02:18 |
|
Сортировка по результатам подзапроса
|
|||
---|---|---|---|
#18+
Имеем 2 таблицы: table1 (id, field1) и table2 (id, field2). Поле id в обеих identity и primary key. Колонка field1 = {1, 2, 3, 4, 5}; колонка field2 = {5, 1, 3}. Тогда твой запрос нужно переписать как select table1.id, field1 from table1 inner join table2 on field1 = field2 order by table2.id ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2001, 08:56 |
|
Сортировка по результатам подзапроса
|
|||
---|---|---|---|
#18+
хотел бы добавить В общем случае эта задача не решаема в принципе - ведь полю field1 в таблице table2 может соответствовать несколько и наоборот. И какое field2 тогда использовать для сортировки? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2001, 09:35 |
|
Сортировка по результатам подзапроса
|
|||
---|---|---|---|
#18+
может для общего случая можно так: select distinct table1.id, table1.field1 from table1,table2 where table1.field1 *= table2.field1 order by table2.id ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2001, 11:08 |
|
Сортировка по результатам подзапроса
|
|||
---|---|---|---|
#18+
Для моего случая получилось так: select * from table1 order by (select sum(field2) from table2 where table2.field1 = table1.field1) Напрягает только время выполнения.. :| p.s. Да да, мне надо было сортировать именно по сумме ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2001, 17:33 |
|
Сортировка по результатам подзапроса
|
|||
---|---|---|---|
#18+
SELECT T1.* FROM Table1 T1 INNER JOIN (SELECT Field1, SUM(Field2) AS SM FROM Table2 GROUP BY Field1) T2 ON T1.Field1 = T2.Field1 ORDER BY T2.SM ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2001, 18:44 |
|
|
start [/forum/topic.php?fid=46&msg=32002106&tid=1827366]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
47ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 270ms |
total: | 407ms |
0 / 0 |