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


Автор: dimes 9.11.2004, 18:45
Есть 2 таблици tab_1 и tab_2 они практически индентичны т.е. имеются много схожих полей(по имени, по типу и по смысловой нагрузки)

например
tab_1 содержит:
date sum
2004-11-01 2
2004-11-03 3
2004-11-04 6

tab_2 содержит:
date sum
2004-11-02 1
2004-11-04 4
2004-11-05 3

как видно значения могут отсутствовать как в первой таблице так и во второй

нужен запрос чтобы получить:
2004-11-01 2
2004-11-02 1
2004-11-03 7
2004-11-04 10
2004-11-05 3

сейчас я делаю отдельные запросы для каждой таблицы, сразу загоняя ответы во временную таблицу, потом делаю выборку(уже из временной таблици) с групировкой и сортировкой.
можно ли тоже самое реализовать одним запросом(желательно чтобы это было не медленее чем мой вариантsmile )
заранее благодарен

и еще версия mySQL 3.23

Автор: Ignat 9.11.2004, 18:59
Если я тебя правильно понял, вот так:
Код

SELECT `date`,`sum` FROM `table1`WHERE 1
UNION
SELECT `date`,`sum` FROM `table2`WHERE 1 ORDER BY `date`;


PS: Предикаты и сортировку ставь свои.
PPS: Имена полей и их порядок в первом и втором селекте должны быть идентичны (либо NULL).

Автор: dimes 9.11.2004, 19:02
Ignat
спасибо
только я забыл версию написать, извините

Цитата
Оператор UNION реализован в MySQL 4.0.0.

к сожелению smile

Автор: Ignat 9.11.2004, 19:09
Тогда сделай два селекта, а массивы слей вместе в клиенте.

Автор: Akina 9.11.2004, 19:21
dimes
Тогда может сделать одну таблицу вместо двух? добавить поле "опознания", если опознать по остальным полям невозможно...

Автор: dimes 9.11.2004, 19:27
спасибо, этого я и боялся...
похоже придется остановится на варианте со временной таблицей
Добавлено @ 19:33
Цитата(Akina @ 9.11.2004, 20:21)
Тогда может сделать одну таблицу вместо двух

к сожелению нельзя

Цитата(Akina @ 9.11.2004, 20:21)
добавить поле "опознания", если опознать по остальным полям невозможно...

а поподробнее можно?

Автор: Akina 9.11.2004, 19:56
dimes
Можно и поподробнее...

Скажем есть 2 таблицы. Имена полей не важны, потому именуем по подобию:

Table1:
Field1
Field2
Field3


Table2:
Field1
Field4
Field5

Т.е. есть поле Field1, которое смысловО одинаково для обоих таблиц (может в макетах обозвано по-разному, но это мелочи), и есть поля Field2-5, причем поля 2 и 4 одного типа (скажем длинное целое), а 3 и 5 - разных и уникальных (скажем string и double).

Возможны объединения:

1)
Table12
Field1
Field2
Field3
Field4
Field5

Принадлежность к таблице четко определяется пустотой значений полей.

2)
Table12
Field1
Field24
Field3
Field5

Принадлежность к таблице и контент Field24 четко определяется пустотой значений полей 3 или 5.

Если же все поля смысловО соответственны или хотя бы типовО соответственны (т.е. 3 и 5 тоже одного типа), то возможно объединение:

3)
Table12
Field1
Field24
Field35
TableNum

Соответственно принадлежность к таблице и контент Field24 и Field35 четко определяетсязначением поля TableNum.

Отбор монотабличных данных производится чуть более длинным условием (скажем для варианта 2 при выборке данных, относящихся только к таблице 1 это будет WHERE (то_что_было) AND Field3 NOT Null), зато упрощается отбор совокупных данных...

PS. Я так понимаю что хостинг - чужой, и версию MySQL не проапдейтить...



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