powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / bug PostgreSQL
17 сообщений из 17, страница 1 из 1
bug PostgreSQL
    #33749407
drunk2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторselect id_table,table_name
from table
where id_table in
(select id_table from v_some_view where ...... );вернет все записи из таблицы "table" если поля "id_table" во вью "v_some_view" нет. сообщения об ошибке тоже нет.

PostgreSQL 8.1.2 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 3.3.1 (SuSE Linux)
...
Рейтинг: 0 / 0
bug PostgreSQL
    #33749517
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это не баг. Это ВАШЕ непонимание вложенных запросов (и передачи в них имен полей внешних (относительно вложения) таблиц) поле id_table в вашем запросе отражает поле таблицы table.

Код: plaintext
select v_some_view.id_table from v_some_view where 

Вернет ошибку.
...
Рейтинг: 0 / 0
bug PostgreSQL
    #33749560
drunk2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4321
Вернет ошибку.понил. зря пример писал :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
--drop table t1;
create table t1 (t1_id int2,t1_name varchar( 10 ));

--drop view v2;
--drop table t2;
create table t2 (t2_id int2,t2_name varchar( 10 ));

insert into t1 values( 1 ,'a');
insert into t1 values( 2 ,'b');
insert into t1 values( 3 ,'c');

create or replace view v2
as
  select t2_id , t2_name from t2; 
запрос
Код: plaintext
select * from t1 where t1_id in (select t1_id from v2);
не возвратит ничего, в том числе и ошибки. если
Код: plaintext
1.
insert into t2 values( 4 ,'d');
то запрос вернет все записи t1
...
Рейтинг: 0 / 0
bug PostgreSQL
    #33753213
st_serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
замени
Код: plaintext
1.
select * from t1 where t1_id in (select t1_id from v2);
на
Код: plaintext
1.
select * from t1 where t1_id in (select v2.t1_id from v2);
...
Рейтинг: 0 / 0
bug PostgreSQL
    #33753222
st_serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
иначе говоря, твой запрос
Код: plaintext
1.
select * from t1 where t1_id in (select t1_id from v2);
для постргреса выглядит как
Код: plaintext
1.
select t1.* from t1 where t1.t1_id in (select t1.t1_id from v2);
думаю, что и в других субд будет тоже самое

4321 объяснил почему
...
Рейтинг: 0 / 0
bug PostgreSQL
    #33753513
Robert Ayrapetyan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У кого-нить на больших таблицах "Cancel query" вешает систему?
...
Рейтинг: 0 / 0
bug PostgreSQL
    #33753777
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
st_serg4321 объяснил почемуя надеялся шо афтар методом медитации дойдет до готовности сам. Ибо пояснения им получены.
...
Рейтинг: 0 / 0
bug PostgreSQL
    #33754372
drunk2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4321 дойдет до готовности сам дошел, ибо : авторпонил. зря пример писал
...
Рейтинг: 0 / 0
bug PostgreSQL
    #33757225
Владимор Конев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
st_sergиначе говоря, твой запрос
Код: plaintext
1.
select * from t1 where t1_id in (select t1_id from v2);
для постргреса выглядит как
Код: plaintext
1.
select t1.* from t1 where t1.t1_id in (select t1.t1_id from v2);
думаю, что и в других субд будет тоже самое
4321 объяснил почемуНифига не тоже самое. К примеру, в Оракле как раз все наоборот - если есть сложный запрос с подзапросом, то видимость полей таблицы будет как раз такой, как хочет автор топика - то есть в подзапросе все поля, указанные без алиаса таблицы в первую очередь будут считаться полями таблицы из подзапроса, а не таблицы из абрамляющего (внешнего) запроса. И если только окажется, что для внутреннего подзапроса нет таблиц, содержащие указанные поля, то тогда будут браться поля из таблиц внешнего запроса (то есть запрос будет парсится как в PostgreSQL).
Для однозначного же трактования того, какое поле какой таблицы мы имеем ввиду рекомендуется использовать алиасы таблиц, и поля перечислять с уточняющим пояснением (не просто f1, а table1.f1). Эта рекомендация и в самом деле "и в других субд будет тоже самое"
...
Рейтинг: 0 / 0
bug PostgreSQL
    #33757477
st_serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это ведь был конкретный пример? не так ли? я вроде попытался объяснить почему так происходит. В оракле этот _конкретный_ пример работает также.
Вам захотелось придраться? у вас получилось, поздравляю.
мое "думаю, что и в других субд будет тоже самое" относилось именно к этому примеру.
...
Рейтинг: 0 / 0
bug PostgreSQL
    #33757506
st_serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ps. oracle 8.1.7.4
...
Рейтинг: 0 / 0
bug PostgreSQL
    #33757509
Владимор Конев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
st_sergэто ведь был конкретный пример? не так ли? я вроде попытался объяснить почему так происходит. В оракле этот _конкретный_ пример работает также.
Вам захотелось придраться? у вас получилось, поздравляю.
мое "думаю, что и в других субд будет тоже самое" относилось именно к этому примеру.Ещё раз повторю.
В оракле запрос вида:
Код: plaintext
select * from t1 where t1_id in (select t1_id from v2);
Отработает вот в таком варианте:
Код: plaintext
1.
2.
3.
4.
5.
select * 
  from t1 
 where t1_id in (
                   select V2.t1_id 
                     from v2
                );
При условии, что есть поле t1_id в наборе данных V2.
И только в противном случае Оракл отработает запрос так, как указано тобой:
Код: plaintext
select * from t1 where t1_id in (select T1.t1_id from v2);

Или таки мы друг друга не поняли???
...
Рейтинг: 0 / 0
bug PostgreSQL
    #33757551
st_serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПри условии, что есть поле t1_id в наборе данных V2.
Абсолютно с тобой согласен, но ведь у автора топика в приведенном им примере нет поля с названием t1_id (возможно копипаст меня подвел? :) )
...
Рейтинг: 0 / 0
bug PostgreSQL
    #33757561
Владимор Конев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
st_sergАбсолютно с тобой согласен, но ведь у автора топика в приведенном им примере нет поля с названием t1_id (возможно копипаст меня подвел? :) )А-га, пардон. Я вопрос от самого автора весьма невниамтельно прочитал...
Вот сейчас перечитал и увидел то, на что раньше не обратил внимания:
drunk2 авторselect id_table,table_name
from table
where id_table in
(select id_table from v_some_view where ...... ); вернет все записи из таблицы "table" если поля "id_table" во вью "v_some_view" нет. сообщения об ошибке тоже нет.

PostgreSQL 8.1.2 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 3.3.1 (SuSE Linux)
Просто глаз за твой пример зацепился :)
Так что мои тебе извинения :)
...
Рейтинг: 0 / 0
bug PostgreSQL
    #33757567
st_serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
:)
...
Рейтинг: 0 / 0
bug PostgreSQL
    #33757597
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимор КоневИ только в противном случае Оракл отработает запрос так, как указано тобой:
Код: plaintext
select * from t1 where t1_id in (select T1.t1_id from v2);

Или таки мы друг друга не поняли???короче, дело в том, что унутренний запрос подтягивает и все внешние имена. (по необходимости). При этом однако не [|не обязательно] выдавая сообщений о множественности имени колонок среди всех внешних имен, если имя совпадает с именем столбца самого этого внутреннего запроса - они считаются используемыми по умолчанию. Так? };o)
...
Рейтинг: 0 / 0
bug PostgreSQL
    #33757632
Владимор Конев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4321короче, дело в том, что унутренний запрос подтягивает и все внешние имена. (по необходимости). При этом однако не [|не обязательно] выдавая сообщений о множественности имени колонок среди всех внешних имен, если имя совпадает с именем столбца самого этого внутреннего запроса - они считаются используемыми по умолчанию. Так? };o)А-га, именно это я и пытался сказать.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / bug PostgreSQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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