Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / как думаете это баг постгреса или что? / 11 сообщений из 11, страница 1 из 1
14.07.2005, 13:36
    #33165865
MaximZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как думаете это баг постгреса или что?
в обще есть запрос:

Код: plaintext
1.
2.
3.
4.
select DISTINCT(v1.vessel_name)
from t_arrivals a, t_vessel v1
where eta BETWEEN '2005-01-01' AND '2005-03-31' AND
	a.id_vessel = v1.id;

Он работает, но если его написать так:

Код: plaintext
1.
2.
3.
4.
select DISTINCT(t_vessel.vessel_name)
from t_arrivals a, t_vessel v1
where eta BETWEEN '2005-01-01' AND '2005-03-31' AND
	a.id_vessel = v1.id;

он тоже работает, но выдает всю таблицу t_vessel.
я считаю что второе исполнения или ошибочно вообще, или должно выдавать такой же результат как и первое.
...
Рейтинг: 0 / 0
14.07.2005, 13:37
    #33165879
MaximZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как думаете это баг постгреса или что?
забыл добавить поле eta встречается только в таблце t_arrivals. В принципе правильнее было бы его писать a.eta
...
Рейтинг: 0 / 0
14.07.2005, 16:00
    #33166417
Meta
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как думаете это баг постгреса или что?
А что планировщик показывает?
...
Рейтинг: 0 / 0
14.07.2005, 16:59
    #33166658
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как думаете это баг постгреса или что?
Omitted FROM Clauses

http://www.postgresql.org/docs/8.0/static/sql-select.html
...
Рейтинг: 0 / 0
14.07.2005, 23:32
    #33167245
Нонайм
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как думаете это баг постгреса или что?
После того как таблице указан псевдоним, для потсгресса это две разных таблицы: t_vessel и v1. Соответственно во втором случае на фром при селекте не обращается внимания
...
Рейтинг: 0 / 0
15.07.2005, 01:09
    #33167270
MaximZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как думаете это баг постгреса или что?
супер, это с какой такой радости селект преестал обращать внимание на фром?
я так понимаю, если указан псевдоним, то и обращаться надо через него, то есть обращение к самой таблице должно вызывать ошибку.

В общем не знаю, спорить можно до посинения, но я считаю что это ошибка.
...
Рейтинг: 0 / 0
15.07.2005, 03:51
    #33167313
фффф
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как думаете это баг постгреса или что?
MaximZ
В общем не знаю, спорить можно до посинения, но я считаю что это ошибка.
Чуть дальше в доке про "Omitted FROM Clauses" написано про add_missing_from. Эта фича отключаема.
...
Рейтинг: 0 / 0
15.07.2005, 10:51
    #33167690
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как думаете это баг постгреса или что?
НонаймПосле того как таблице указан псевдоним, для потсгресса это две разных таблицы: t_vessel и v1. Соответственно во втором случае на фром при селекте не обращается вниманияНа фром внимание обращается, и происходит unconstrained join: http://www.postgresql.org/docs/8.0/static/sql-select.html While this is a convenient shorthand, it's easy to misuse. For example, the command

SELECT distributors.* FROM distributors d;

is probably a mistake; most likely the user meant

SELECT d.* FROM distributors d;

rather than the unconstrained join

SELECT distributors.* FROM distributors d, distributors distributors;

that he will actually get.
...
Рейтинг: 0 / 0
15.07.2005, 11:46
    #33167896
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как думаете это баг постгреса или что?
MaximZ это с какой такой радости селект преестал обращать внимание на фром?


если сходить в доку по ссылке, то увидим, что такое поведение ...omitted... сохранено "по умолчанию" для совместимости с предыдущими версиями. И что пуристы имеют право его отклюить (см ссылку по переходу оттуда). Что кажется желательным в любом случае - не проблема выловить все ошибки, которые всплывут после отключения.



ЗЗЫ. кстати сказать, то что написано в качестве 2-го запроса просто не должно проходить парсер при "стандартном SQL" т.к. релейшена t_vessel во фроме нет. А есть a и v1
...
Рейтинг: 0 / 0
18.07.2005, 03:03
    #33170404
MaximZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как думаете это баг постгреса или что?
я про это и говорил.
В общем все ясно. Но мне такие совместимости не очень нравятся.
Кстати, то гда вопрос, почему выбирается вся таблица. Ведь даже если учесть, что он видит эту таблицу в фроме, он же тогда должен понимать и where, а он его не учитывает.

В обещм отвечать не обязательно. Есть вещи, в общем не очень логичные вещи. ;)
...
Рейтинг: 0 / 0
18.07.2005, 10:22
    #33170637
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как думаете это баг постгреса или что?
MaximZКстати, то гда вопрос, почему выбирается вся таблица. Ведь даже если учесть, что он видит эту таблицу в фроме, он же тогда должен понимать и where, а он его не учитывает.Учитывает! Ограничение в where на таблицу v1, но не на t_vessel.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
-- вашему запросу
select DISTINCT(t_vessel.vessel_name)
from t_arrivals a, t_vessel v1
where eta BETWEEN '2005-01-01' AND '2005-03-31' AND
	a.id_vessel = v1.id;

-- эквивалентен такой
select DISTINCT(t_vessel.vessel_name)
from t_arrivals a, t_vessel v1, t_vessel
where eta BETWEEN '2005-01-01' AND '2005-03-31' AND
	a.id_vessel = v1.id;

-- а вот простой пример безусловного объединения
select * from t_vessel v1, t_vessel v2 where v1.id= 1 ;
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / как думаете это баг постгреса или что? / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]