Проблема с GROUP

Анатолий

Новичок
Проблема с GROUP

Есть две одинаковые таблица T1 и T2. Данные в них добавляются независимо друг от друга, а вот вывод нужно сделать одновременон из обоих таблиц.
Но главная проблема в том, что в результате не должно быть одинаковых значеий поля name.

Структура таблиц:
T1 (id | name | number)
T2 (id | name | number)

Таким образом если таблицы T1 и T2 имеют данные, сщщтветственно:
1 | Паша | 3
2 | Оля | 4

и

2 | Паша | 7
3 | Ира | 2

то результат запроса должен иметь вид:
3 | Ира | 2
1 | Паша | 3
2 | Оля | 4

У меня так и не получилось сделать такой запрос.
Помогите, пожалуйста.

-~{}~ 17.12.05 18:56:

Пробовал так:
Код:
SELECT id, name
FROM (
(SELECT id, name FROM `T1` GROUP BY name)
UNION ALL
(SELECT id, name FROM `T2` GROUP BY name))
GROUP BY name
Но ни х... не получилось... выдает ошибку.
Версия MySQL 4.1.8-max
 

Анатолий

Новичок
svetasmirnova
Большое спасибо за помощь, но все равно проблема осталась...
Убрал ALL, но все равно выдает ошибку:
#1248 - Every derived table must have its own alias

Но алиас у меня задать не получилось...
 

Апельсин

Оранжевое создание
Анатолий, а в чем проблема задать алиас?
Я думаю Вы понимаете где в этом запросе derived table и где надо указать алиас ..
 

chira

Новичок
Код:
SELECT a.id, a.name
FROM (
(SELECT id, name FROM `T1`)
UNION ALL
(SELECT id, name FROM `T2`)) a
GROUP BY name
 

Апельсин

Оранжевое создание
Анатолий, скорее всего старая бага. Обновите mysql ..

4.1.8 старовата будет ..
 

Анатолий

Новичок
Апельсин
Думаете дело в этом??? Я то у себя обновлю, а вот на удаленном сервере это, возможно будет проблемой.

chira, svetasmirnova
А у вас какие версии MySQL???
 

svetasmirnova

маленький монстрик
У меня 4.0.что-то неподдерживающее вложенные запросы и девичья память. Но как у chira должно работать.
 

Анатолий

Новичок
svetasmirnova
Странно... как у chira тоже не работает, пишет ту же ошибку...


chira
А вы проверяли этот запрос в деле на MySQL 4.1.x? Или написали по правилам обычного SQL???
 

chira

Новичок
Код:
mysql> select * from t1;
+----+------+-----+
| id | name | num |
+----+------+-----+
|  1 | паша |   3 |
|  2 | Оля  |   4 |
+----+------+-----+
2 rows in set (0.00 sec)

mysql> select * from t2;
+----+------+-----+
| id | name | num |
+----+------+-----+
|  2 | паша |   7 |
|  3 | Ира  |   2 |
+----+------+-----+
2 rows in set (0.00 sec)

mysql> SELECT a.id, a.name
    -> FROM (
    -> (SELECT id, name FROM t1)
    -> UNION ALL
    -> (SELECT id, name FROM t2)) a
    -> GROUP BY name;
+----+------+
| id | name |
+----+------+
|  2 | Оля  |
|  1 | паша |
|  3 | Ира  |
+----+------+
3 rows in set (0.00 sec)

mysql> select version();
+-----------+
| version() |
+-----------+
| 4.1.11-nt |
+-----------+
1 row in set (0.00 sec)

mysql>
 

Анатолий

Новичок
chira
Спасибо, за помощь!
У меня, к сожалению не заработало... наверное, это из-за MySQL 4.1.8. Попробую обновить...

-~{}~ 21.12.05 19:36:

Еще раз большое спасибо, всем помогавшим... но к сожалению, данное решение на моем MySQL 4.0.8 не заработало.

Кто-нибудь может подсказать другое решение проблемы???
 

svetasmirnova

маленький монстрик
Анатолий
Так 4.0.8 или 4.1.8? Если последнее: что в самом деле мешает обновить?
 

Анатолий

Новичок
svetasmirnova
На локальной машине - 4.1.8.
На сервере - 4.0.8. На локальной машине ничего не мешает обновить, а вот на сервере мешает то, что сервер, к сожалению не мой....
 

svetasmirnova

маленький монстрик
Вот с этого и надо было начинать. Вопрос №2. Что мешает сделать в 2 запроса?
 

Анатолий

Новичок
Автор оригинала: svetasmirnova
Вот с этого и надо было начинать. Вопрос №2. Что мешает сделать в 2 запроса?
И потом в цикле перебирать полученные массивы и группировать нужные данные??? Не очень элегантное решение. Один мой товарищ сказал - не стоит делать средствами PHP, то что можно сделать на MySQL. Здесь я с ним полностью согласен.

Так, что есть какие-нибудь предложения как данную проблему можно решить средствами MySQL??? Или нет?
 

svetasmirnova

маленький монстрик
>И потом в цикле перебирать полученные массивы и группировать нужные данные???

Зачем??? SELECT INTO TEMPORARY TABLE ххх то, что ты написал в первом посте. Дальше понятно?
 

Анатолий

Новичок
To: svetasmirnova
Большое спасибо! В очередной раз выручаете! :)
Теперь все работает, только с маленькой поправкой. В MySQL нет конструкции SELECT INTO TEMPORARY TABLE, такая конструкция будет работать, например, в Oracle. В MySQL будет работать конструкция вида SELECT ... INTO TABLE ....

В общем вот какой запрос у меня получился:
Код:
CREATE TEMPORARY TABLE  tmp 
(SELECT id, name FROM `T1`)
UNION ALL
(SELECT id, name FROM `T2`);
SELECT * FROM tmp GROUP BY name;
Но в итоге я отказался от группировки и решил эту проблему другим путем. Но зато вспомнил о существовании временных таблиц.
Еще раз спасибо всем учавствовавшим!!!
 
Сверху