Форум сетевых администраторов
Показаны 12 сообщений на этой странице

Форум сетевых администраторов (http://netadmin.ws/forum/index.php)
- MySQL (http://netadmin.ws/forum/forumdisplay.php?forumid=40)
-- Как заменить Union?... (http://netadmin.ws/forum/showthread.php?threadid=5109)


Помещено RoodWit 14-04-2003 в 20:02:

Как заменить Union?...

Собственно такая задача...

есть две одинаковые по структуре таблицы...

скажем, нужно выбрать из них по строке и сделать одну таблицу...

самое простое - это сделать примерно следующее:

select *
from table1
where num=$x
union
select *
from table2
where num=$x

Но! MySQL не поддерживает Union до версии 4.0... Мне же доступна только 3.23... Целый день ломаю, как решить проблему красиво - но так и не придумал...

Есть идеи?

Спасибо!


Помещено Viktor 15-04-2003 в 12:45:

Попробуй вторую строку довавить с пом. Insert.

__________________
Тест - проверка верности!


Помещено polo 15-04-2003 в 21:33:

используй . (точку) это уже служит для объеденения таблиц.

__________________
Всегда есть решение.


Помещено Rumata 16-04-2003 в 15:37:

2polo: нельзя ли ссылку в доку, где описана "."?
2RoodWit: оператор "." мне не знаком, поэтому я бы в такой ситуации в пхп пользовался бы двумя запросами и array_merge


Помещено polo 16-04-2003 в 20:02:

да это я не то сказал, просто выборка с двух таблиц я не понимаю в чем тут проблема.

__________________
Всегда есть решение.


Помещено Rumata 16-04-2003 в 21:06:

Ð_-э-э ну в классической теории реляционных бд (точнее, в теории реляционной алгебры) есть такой оператор как union - объединение. Ð_то практически теоретико-множественное объединение множеств кортежей, единственно, что требуется, чтобы представления совпадали по типу. Т.е. в данном случае фактически нужно дописать вторую таблицу к концу первой - увеличив количество кортежей - затем исключить повторения и, наконец, произвести выборку по условию. Афаик средствами 3-го мускула это реализовать не получится, так что прийдется совмещать пхп (ну или какой-то другой язык) и бд.


Помещено SCHIZO 15-05-2003 в 12:14:

Re: Как заменить Union?...

quote:
Первоначальное сообщение от RoodWit
Собственно такая задача...

есть две одинаковые по структуре таблицы...
скажем, нужно выбрать из них по строке и сделать одну таблицу...

...SKIPPED...

Целый день ломаю, как решить проблему красиво - но так и не придумал...



А не проще сделать одну таблицу, раз они по структуре одинаковые? А если нужно разбить данные на две группы заведи дополнительное поле char(0) NULL или varchar(0) NULL Все что IS NULL это одна таблица, остальное="" (строка нулевой длинны) другая группа данных.

__________________
FAQ OFF


Помещено RaZEr 15-05-2003 в 16:15:

Синтаксис SELECT позволяет во FROM перечислять столько таблиц, сколько нужно.

__________________
The time was broken ...


Помещено Rumata 15-05-2003 в 16:30:

quote:
Первоначальное сообщение от RaZEr
Синтаксис SELECT позволяет во FROM перечислять столько таблиц, сколько нужно.
Нет.
Читай внимательнее доки:
quote:
The FROM table_references clause indicates the tables from which to retrieve rows. If you name more than one table, you are performing a join.
Ð_то не выборка из нескольких таблиц, а их соединение.


Помещено RaZEr 15-05-2003 в 17:00:

Что я уже немогу ответить не прочитав топик

Про union:

code:

CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY, message CHAR(20));
CREATE TABLE t2 (a INT AUTO_INCREMENT PRIMARY KEY, message CHAR(20));
INSERT INTO t1 (message) VALUES ("Testing"),("table"),("t1");
INSERT INTO t2 (message) VALUES ("Testing"),("table"),("t2");
CREATE TABLE total (a INT NOT NULL, message CHAR(20), KEY(a)) TYPE=MERGE UNION=(t1,t2);

__________________
The time was broken ...


Помещено Rumata 15-05-2003 в 19:12:

Во, вот это - другой разговор =)))
вот только в документации на версию 3.23* я такого тоже не нашел =(


Помещено RaZEr 15-05-2003 в 19:27:

Ð_аботает начиная с 3.23.25.

__________________
The time was broken ...


Формат времени GMT. Текущее время 11:28.
Показаны 12 сообщений на этой странице

Powered by: vBulletin Version 2.2.4
Copyright © Jelsoft Enterprises Limited 2000, 2001.