Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Объединение двух разных таблиц


Автор: Wowa 2.4.2005, 13:52
Есть две таблицы, в одной 20 столбцов - в другой 21.
В таблицах различаются только 2 столбца. Остальные столбцы одинаковые.

Как сделать SELECT * из этих двух таблиц так, чтобы эти две таблицы пристыковывались друг с другу не по стольцам или каким-то критериям, а просто чтобы для запроса SELECT * это выглядело одной таблицей с 22 столбцами.

Автор: Kesh 2.4.2005, 14:23
Admin А почему не пристыковывать по столбцам... если записи одинаковые - быбирать дополнительное поле по primary key через join...

Автор: simanyay 2.4.2005, 14:39
Насколько я понял эту проблему, настолько я смог сообразить решение:
Код

SELECT t1.*, t2.different_columns FROM table1 as t1, table2 as t2 WHERE t1.id = t2.id;


Если я не так понял, поясни плиз

Автор: Wowa 2.4.2005, 14:45
Цитата(Kesh @ 2.4.2005, 12:23)
Admin А почему не пристыковывать по столбцам... если записи одинаковые - быбирать дополнительное поле по primary key через join...

дык. записи в этих двух таблицах совершенно разные. И они никак ни по каким полям не связаны. Мне просто надо их представить ввиде одной таблицы.
Добавлено @ 14:46
Цитата(simanyay @ 2.4.2005, 12:39)
WHERE t1.id = t2.id;

они не связаны. Это все должны быть разные строки в выборке.

Автор: simanyay 2.4.2005, 15:17
Тогда же получиться декартово произведение? т.е. каждая строка первой таблицы, будет присоединена ко всем строкам второй. Тебе это нужно? Тогда просто соединяй без условий. Но (!) это не есть гут, это очень плохо.

Автор: Wowa 2.4.2005, 17:24
Цитата(simanyay @ 2.4.2005, 13:17)
Тогда же получиться декартово произведение? т.е. каждая строка первой таблицы, будет присоединена ко всем строкам второй. Тебе это нужно? Тогда просто соединяй без условий. Но (!) это не есть гут, это очень плохо.

дык, не нужно мне соединять строки одна с другой. Последний столбец первой таблицы с первым столбцом второй таблицы - не нужно.
Добавлено @ 17:25
мне нужно соединение, которое было бы равносильно выбраннным данным из первой таблицы и добавленным в массив + выбранным данным из второй таблицы, которые также в этот же массив добавить.

Автор: Secandr 3.4.2005, 11:00
Может Union?

Автор: Kesh 3.4.2005, 12:32
Admin Может на примере пояснишь?.. А то я что-то не пойму... smile

Автор: Wowa 3.4.2005, 12:42
Цитата(Secandr @ 3.4.2005, 09:00)
Может Union?

Да. Юнион подходит, но он только начиная с четвертой версии MySQL доступен и если разное кол-во столбцов в таблицах, то
Код

SELECT * FROM table UNION SELECT * FROM table2 


не подходит.

Автор: Kesh 3.4.2005, 12:53
Но ведь можно в нужном запросе искусственно добавить столбцы...

Автор: Wowa 3.4.2005, 13:33
Цитата(Kesh @ 3.4.2005, 10:53)
Но ведь можно в нужном запросе искусственно добавить столбцы...

как?

Мне просто лень что-то все 20 столбцов, с которых выборка нужна, перечислять в запросе.

Автор: Secandr 3.4.2005, 13:48
Код

SELECT a,b,'','' FROM table UNION SELECT a,b,c,d FROM table2 

Автор: Kesh 6.4.2005, 21:40
Цитата(Secandr @ 3.4.2005, 13:48)
Код

SELECT a,b,'','' FROM table UNION SELECT a,b,c,d FROM table2 

Вот-вот...

Автор: Cetus 7.4.2005, 07:11
можно так попробовать, и гемороя не будет с написанием всех столбцов smile
SELECT table1.*, NULL from table1 union select table2.* from table2
(тестировалось на MySQL 4.0.2)
Добавлено @ 07:13
либо вместо NULL написать '' (как было замечено выше)

Автор: Akina 7.4.2005, 08:07
Цитата(Cetus @ 7.4.2005, 08:11)
можно так попробовать, и гемороя не будет с написанием всех столбцов
SELECT table1.*, NULL from table1 union select table2.* from table2
(тестировалось на MySQL 4.0.2)

Все бы хорошо, но нужно иметь гарантию что * выдаст столбцы в нужном порядке...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)