Forum Webscript.Ru

Общие => Базы данных => Тема начата: win_pup от 27 Февраля 2003, 15:01:46

Название: Добавление скобок при объединении(union) 2-х таблиц
Отправлено: win_pup от 27 Февраля 2003, 15:01:46
Здравствуйте!...

Немного не понятно, почему так получается:
если я пишу запрос:

select * from table1 union all select * from table2

то всё работает нормально,
но стоит добавить скобки:

(select * from table1) union all (select * from table2)

и тогда результат пуст... :(

почему так происходит?...

Спасибо!...
Название: Добавление скобок при объединении(union) 2-х таблиц
Отправлено: fidget от 27 Февраля 2003, 16:44:09
версия?
у меня все Ок работает вне зависимости от скобочек.
Название: Добавление скобок при объединении(union) 2-х таблиц
Отправлено: win_pup от 28 Февраля 2003, 06:46:58
да, извиняюсь, версию-то я забыл написать:
MySQL 4.0.9-gamma-nt
Название: Добавление скобок при объединении(union) 2-х таблиц
Отправлено: fidget от 28 Февраля 2003, 11:42:05
попробуй проапгрейдить и проверить, я на 4.0.11 проверяла - все работало нормально.
Название: Добавление скобок при объединении(union) 2-х таблиц
Отправлено: win_pup от 03 Марта 2003, 07:30:31
странно, апгрейдил до версии 4.0.11 - всё равно такая же проблема...
даже если написать простейший запрос:

select * from table

то работает, а если этот запрос в скобки поместить:

(select * from table)

то уже никак, результат пустой получается
Название: Добавление скобок при объединении(union) 2-х таблиц
Отправлено: Kwazar от 03 Марта 2003, 09:54:22
Какуая ошибка выдается?
Таблица точно существеут? К базе правильно стукаешься?
Название: Добавление скобок при объединении(union) 2-х таблиц
Отправлено: win_pup от 03 Марта 2003, 09:58:01
да... таблица есть!... конект есть!...
а вот ошибку-то как раз и не выдаёт... :-/
(типа так и должно быть)
просто пустой результат запроса возвращает и всё!...

так ведь не должно быть по идее?...
Название: Добавление скобок при объединении(union) 2-х таблиц
Отправлено: Kwazar от 03 Марта 2003, 10:33:00
На каком языке пишите?
Было бы неплохо посмотреть как вы формируете sql на этом языке программирования. Скорее всего дело именно в этом.
Уж (select * from table) должен работать
Название: Добавление скобок при объединении(union) 2-х таблиц
Отправлено: win_pup от 03 Марта 2003, 11:17:08
в принципе, пишу на PHP...
но дело в том, что именно ЭТОТ запрос я пишу напрямую к базе (для проверки правильности его выполнения) через программу администрирования mySQL_Front в закладке Query... поэтому, среда программирования тут не причём...
Название: Добавление скобок при объединении(union) 2-х таблиц
Отправлено: fidget от 03 Марта 2003, 11:42:51
win_pup, во первых тестировать надо в первую очередь консольным клиентом, а не ГУИшными.
Во-вторых, если уж у вас не работает, то приведите пример маленький, что бы другие тоже могли проверить.
Название: Добавление скобок при объединении(union) 2-х таблиц
Отправлено: win_pup от 03 Марта 2003, 11:48:14
просто беру любую из таблиц и выполняю:

select * from <таблица>

работает!...

Обставляю всё это дело скобками:

(select * from <таблица>)

не работает!... :-(
Название: Добавление скобок при объединении(union) 2-х таблиц
Отправлено: fidget от 03 Марта 2003, 11:53:24
Повторяю еще раз: приведи пример!
У меня для любой таблицы все работает замечательно.

mysql> create table u1(
    -> id int);
Query OK, 0 rows affected (0.16 sec)

mysql> create table u2(
    -> id int);
Query OK, 0 rows affected (0.01 sec)

mysql> insert into u1 values(1),(2),(3);
Query OK, 3 rows affected (0.04 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> insert into u2 values(4),(5),(6);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> (select * from u1);
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
+------+
3 rows in set (0.00 sec)
mysql> (select * from u1) union (select * from u2);
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
|    4 |
|    5 |
|    6 |
+------+
6 rows in set (0.15 sec)
Название: Добавление скобок при объединении(union) 2-х таблиц
Отправлено: win_pup от 04 Марта 2003, 09:14:29
Цитировать
win_pup, во первых тестировать надо в первую очередь консольным клиентом, а не ГУИшными.

действительно, через консольный интерфейс всё замечательно выполняется...
и в PHP тоже работает, но не совсем...
но, я так понял, тут не PHP виноват а синтаксис не позволяет (проверял в консольном):

запрос

insert into tmp select * from table1 union all select * from table2

работает замечательно, а вот тот же запрос но со скобками

insert into tmp (select * from table1) union all (select * from table2)

уже не работает... :-(

я прав?...
Название: Добавление скобок при объединении(union) 2-х таблиц
Отправлено: fidget от 04 Марта 2003, 14:13:09
insert into tmp select * from u1 union all (select * from u2);

работает отлично, а то что не работает у тебя


insert into tmp (select * from table1) ...
так это у тебя синтаксис INSERT ... SELECT неправильный и к UNION не имеет ни малейшего отношения :-)
Название: Добавление скобок при объединении(union) 2-х таблиц
Отправлено: win_pup от 04 Марта 2003, 14:27:33
> fidget
верно!...
без скобок в первом select`е всё замечательно работает!... :)

Вроде бы немного разобрался, спасибо!... ;)

и вот мне ещё интересно, к этому union`у никак нельзя применить группировку (group by ... )?