[mysql] Объединить две таблицы.
От: Олег Гашев
Дата: 14.09.07 15:48
Оценка:
Есть две таблицы:


table1.

id name
1  name1
2  name2

table2.
id table1_id name  value
1  1         name1 value1
2  1         name2 value2
3  2         name1 value3
4  2         name3 value4

Надо получить select, отдающий

id name1  name2  name3
1  value1 value2
2         value3 value4



Плюс возможность сортировки по полю name1, name2, name3. Такое можно реализовать?
Либо я найду путь, либо проложу его. © Свифт
Re: [mysql] Объединить две таблицы.
От: Олег Гашев
Дата: 14.09.07 15:50
Оценка:
Вернее

Надо получить select, отдающий

id name1  name2  name3
1  value1 value2
2  value3        value4
Либо я найду путь, либо проложу его. © Свифт
Re[2]: [mysql] Объединить две таблицы.
От: Аноним  
Дата: 14.09.07 22:21
Оценка:
Здравствуйте, Олег Гашев, Вы писали:

ОГ>Вернее


ОГ>Надо получить select, отдающий


ОГ>
ОГ>id name1  name2  name3
ОГ>1  value1 value2
ОГ>2  value3        value4
ОГ>


Количество nameN ограничено (разумным числом, меньше 32)?
Re[3]: [mysql] Объединить две таблицы.
От: Олег Гашев
Дата: 15.09.07 04:40
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Количество nameN ограничено (разумным числом, меньше 32)?


Нет.
Либо я найду путь, либо проложу его. © Свифт
Re[4]: [mysql] Объединить две таблицы.
От: Аноним  
Дата: 15.09.07 14:22
Оценка:
Здравствуйте, Олег Гашев, Вы писали:

ОГ>Здравствуйте, Аноним, Вы писали:


А>>Количество nameN ограничено (разумным числом, меньше 32)?


ОГ>Нет.


Тогда не знаю Такая операция вроде называется поворот (pivot) — вряд ли поддерживается.
Re[5]: [mysql] Объединить две таблицы.
От: Олег Гашев
Дата: 15.09.07 14:25
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Тогда не знаю Такая операция вроде называется поворот (pivot) — вряд ли поддерживается.


Уже знаю. crosstab. MySQL 5.
Либо я найду путь, либо проложу его. © Свифт
Re[5]: [mysql] Объединить две таблицы.
От: Олег Гашев
Дата: 15.09.07 14:29
Оценка:
Здравствуйте, Аноним, Вы писали:

А>>>Количество nameN ограничено (разумным числом, меньше 32)?


С чем связано число 32?
Либо я найду путь, либо проложу его. © Свифт
Re[6]: [mysql] Объединить две таблицы.
От: Аноним  
Дата: 15.09.07 14:48
Оценка:
Здравствуйте, Олег Гашев, Вы писали:

ОГ>Здравствуйте, Аноним, Вы писали:


А>>>>Количество nameN ограничено (разумным числом, меньше 32)?


ОГ>С чем связано число 32?


Насколько я помню — максимальное число соединений (может, уже поменялось). Можно делать извращённым способом с помощью соединений — соорудить подзапросы, которые выдают таблицу (table1_id, value) для каждого nameN. Затем сделать FULL OUTER JOIN по table1_id.
PS. Только что посмотрел на то, что требуется получить — не понял, почему value3 соответствует name2?
Re[7]: [mysql] Объединить две таблицы.
От: Олег Гашев
Дата: 15.09.07 14:54
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Олег Гашев, Вы писали:


ОГ>>Здравствуйте, Аноним, Вы писали:


А>>>>>Количество nameN ограничено (разумным числом, меньше 32)?


ОГ>>С чем связано число 32?


А>Насколько я помню — максимальное число соединений (может, уже поменялось). Можно делать извращённым способом с помощью соединений — соорудить подзапросы, которые выдают таблицу (table1_id, value) для каждого nameN. Затем сделать FULL OUTER JOIN по table1_id.

А>PS. Только что посмотрел на то, что требуется получить — не понял, почему value3 соответствует name2?

name1. Смотри моё второе сообщение в ветке.

Надо получить select, отдающий

id name1  name2  name3
1  value1 value2
2  value3        value4


Есть идея сделать temp table, куда сбрасывать через insert select всю необходимую информацию. А потом вытаскивать из таблицы всё необходимое.
Либо я найду путь, либо проложу его. © Свифт
Re: [mysql] Объединить две таблицы.
От: ab6qy  
Дата: 16.09.07 03:25
Оценка:
Здравствуйте, Олег Гашев, Вы писали:

А что предполагается делать с результатом этого селекта? Вывести на страницу?
Re[2]: [mysql] Объединить две таблицы.
От: Олег Гашев
Дата: 16.09.07 03:41
Оценка:
Здравствуйте, ab6qy, Вы писали:

A>А что предполагается делать с результатом этого селекта? Вывести на страницу?


Отчёт. Нужен постраничный вывод и сортировка по любому полю.
Либо я найду путь, либо проложу его. © Свифт
Re: [mysql] Объединить две таблицы.
От: eiNtiel  
Дата: 16.09.07 06:10
Оценка:
Здравствуйте, Олег Гашев, Вы писали:

ОГ>Надо получить select, отдающий


ОГ>id name1 name2 name3

ОГ>1 value1 value2
ОГ>2 value3 value4
ОГ>[/code]


ОГ>Плюс возможность сортировки по полю name1, name2, name3. Такое можно реализовать?


Если бы мне надо было сформировать такой отчет, я бы сделал так. Сначала 1м запросом получаем шапку таблицы:
select distinct name, 2 as ord
from table2
union
values 
('id', 1)
order by 2, 1


Далее 2м запросом сами данные:
select com.id, com.name, t2.value, t_ord.value as ord
from table2 t2
right join (select * from (select id from table1) as a1, (select distinct name from table2) as a2) as com
      on com.id = t2.table1_id and com.name = t2.name
left join (select table1_id, value from table2 where name = 'name1') as t_ord on t_ord.table1_id = com.id

order by ord, name


На выходе получим такой результат:
id  name   value    ord
--  -----  -----   -----
2   name1  val3    val4
2   name2  [Null]  val4
2   name3  val4    val4
1   name1  val1    [Null]
1   name2  val2    [Null]
1   name3  [Null]  [Null]


Обход резалт сета при условии что формируем HTML таблицу (тоесть заполнение построчно) делается очень просто. Сортировка в запросе задается веделенным жирным условием. Разбивка на страницы тоже сложности не составит.
... << RSDN@Home 1.2.0 alpha rev. 669>>
Re[2]: [mysql] Объединить две таблицы.
От: eiNtiel  
Дата: 16.09.07 07:03
Оценка:
Здравствуйте, eiNtiel, Вы писали:

извиняюсь, результат показан для сортировки по name3
where name = 'name3'
... << RSDN@Home 1.2.0 alpha rev. 669>>
Re[2]: [mysql] Объединить две таблицы.
От: Олег Гашев
Дата: 18.09.07 19:19
Оценка:
Здравствуйте, eiNtiel, Вы писали:


N>Если бы мне надо было сформировать такой отчет, я бы сделал так. Сначала 1м запросом получаем шапку таблицы:

N>
N>select distinct name, 2 as ord
N>from table2
N>union
N>values 
N>('id', 1)
N>order by 2, 1
N>



MySQL said: Documentation
#1064 — You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'values ( 'id' , 1 ) order by 2 , 1
LIMIT 0, 30' at line 1

Либо я найду путь, либо проложу его. © Свифт
Re[3]: [mysql] Объединить две таблицы.
От: eiNtiel  
Дата: 19.09.07 01:45
Оценка:
Здравствуйте, Олег Гашев, Вы писали:

ОГ> MySQL said: Documentation
ОГ>#1064 — You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'values ( 'id' , 1 ) order by 2 , 1
ОГ>LIMIT 0, 30' at line 1


Достаточно этого:
select distinct name
from table2
order by name


Я просто изначально хотел сделать все одним запросом поэтому туда попала id. Не нужна она там.

ps: values() это из DB2 на ней тестил )
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.