powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Informix [игнор отключен] [закрыт для гостей] / Загадка Informix 12
25 сообщений из 38, страница 1 из 2
Загадка Informix 12
    #38464866
ak-47
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDS 12.10.FC1

Создаем:
Код: sql
1.
2.
3.
create table _aaa (id serial, name varchar(32));

create table _bbb (id serial, name varchar(32));



Вставляем:
Код: sql
1.
2.
3.
insert into _aaa (name) values ('ABCDEFGHIJKLMNOPQRUVWXYZ');

insert into _bbb (id, name) values (200000,'QWERTYUIOPASDFGHJKLZXCVBNM');



Выполняем в dbaccess:
Код: sql
1.
2.
3.
select * from _aaa a
  left join _bbb b on a.id = b.id
where b.id is null;



Получаем:

id name id_1 name_1
1 ABCDEFGHIJKLMNOPQRUVWXYZ NULL NULL

Чешем репу (с) :)
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38464942
ak-47
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ak-47, Стоп это я неправильно упростил! Здесь норм Сейчас перепишу.
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38464976
ak-47
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще разок

Создаем:
Код: sql
1.
2.
3.
create table _aaa (id serial not null, name varchar(32));

create table _bbb (id serial not null, name varchar(32));



Вставляем:
Код: sql
1.
2.
3.
insert into _aaa (name) values ('ABCDEFGHIJKLMNOPQRUVWXYZ');

insert into _bbb (name) values ('QWERTYUIOPASDFGHJKLZXCVBNM');



Сейчас запрос
Код: sql
1.
2.
3.
select * from _aaa a
  left join _bbb b on a.id = b.id
where b.id is null;



не возвращает записей,

Далее доводим кол-во записей в _bbb до 2048 и более

Код: sql
1.
insert into _bbb (name) select name from _bbb;



И предыдущий запрос начинает возвращать
id name id_1 name_1
1 ABCDEFGHIJKLMNOPQRUVWXYZ NULL NULL
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38465256
victor16
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
drop table if exists _aaa;
drop table if exists _bbb;
create table _aaa (id serial(1) not null, name varchar(32));
create table _bbb (id serial(2) not null, name varchar(32));
insert into _aaa (name) values ('ABCDEFGHIJKLMNOPQRUVWXYZ');
insert into _bbb (name) values ('QWERTYUIOPASDFGHJKLZXCVBNM');
select * from _aaa a left join _bbb b on a.id = b.id where b.id is null;
insert into _bbb (name) select name from _bbb;
select * from _aaa a left join _bbb b on a.id = b.id where b.id is null;
insert into _bbb (name) select name from _bbb;
select * from _aaa a left join _bbb b on a.id = b.id where b.id is null;
insert into _bbb (name) select name from _bbb;
select * from _aaa a left join _bbb b on a.id = b.id where b.id is null;


Informix 11.70FC7W3
Всегда возвращает только одну запись, независимо от количества строк в _bbb
результат1 ABCDEFGHIJKLMNOPQRUVWXYZ NULL NULL
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38465310
ak-47
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
victor16Всегда возвращает только одну запись, независимо от количества строк в _bbb

Ух ты. Дело в том, что не должно быть там записи. Условие написано в where, а не в условии объединения ...on... and...
Такой результат должен возвращать запрос:

Код: sql
1.
2.
select * from _aaa a
  left join _bbb b on a.id = b.id and b.id is null



11.7.FC5, 11.7.TC4, считаю правильным выполнение:

Код: sql
1.
2.
3.
select * from _aaa a
  left join _bbb b on a.id = b.id
where b.id is null;


без записей

Код: sql
1.
2.
select * from _aaa a
  left join _bbb b on a.id = b.id and b.id is null



id name id_1 name_1
1 ABCDEFGHIJKLMNOPQRUVWXYZ NULL NULL
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38465348
victor16
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ak-47считаю правильным выполнение:

Код: sql
1.
2.
3.
select * from _aaa a
  left join _bbb b on a.id = b.id
where b.id is null;


без записей


Википедия похоже не согласна с Вами :)
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38465378
victor16
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробовал на 11.50.UC7W1. Результат не изменился от смены версии.
Ищите подвох в данных, хранящихся в таблицах.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
-- drop table if exists _aaa;
-- drop table if exists _bbb;
create table _aaa (id serial(1) not null, name varchar(32));
create table _bbb (id serial(2) not null, name varchar(32));
insert into _aaa (name) values ('ABCDEFGHIJKLMNOPQRUVWXYZ');
insert into _bbb (name) values ('QWERTYUIOPASDFGHJKLZXCVBNM');
select * from _aaa a left join _bbb b on a.id = b.id where b.id is null;
insert into _bbb (name) select name from _bbb;
select * from _aaa a left join _bbb b on a.id = b.id where b.id is null;
insert into _bbb (name) select name from _bbb;
select * from _aaa a left join _bbb b on a.id = b.id where b.id is null;
insert into _bbb (name) select name from _bbb;
select * from _aaa a left join _bbb b on a.id = b.id where b.id is null;

select * from _aaa;
select * from _bbb;
drop table _aaa;
drop table _bbb;


Всегда возвращает только одну запись, независимо от количества строк в _bbb
результат1 ABCDEFGHIJKLMNOPQRUVWXYZ NULL NULL
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38465472
ak-47
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
victor16, Почему вы в своем примере сериал в _bbb начинаете с 2 ? Там нечему объединятся. Такой результат меня не удивляет
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38465474
ak-47
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
victor16Википедия похоже не согласна с Вами :)

Прочитал, спасибо. Там приводится классический пример left join.
Объясню на данных из Википедии, что получается у меня:
У меня нет нулов во второй таблице, а есть условие where b.cityid is null
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
create table city (id serial not null, name varchar(32));
create table person (cityid serial not null, name varchar(32));

insert into city (name) values ('Москва');

insert into person (name) values ('Андрей');
insert into person (name) values ('Леонид');
insert into person (name) values ('Сергей');



Запрос
Код: sql
1.
2.
3.
select * from city a
  left join person b on a.id = b.cityid 
where b.cityid is null;



Не должен возвращать записей. Как это и делается на 11.7.FC5, 11.7.TC4
На 12 наблюдаю тот же эффект что и раньше - нет записей, при добавлении в person более 2048 - есть.
Проверьте на 11.5 без serial(1), serial(2) в create, это было нечестно :)
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38465511
Ikir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
victor16 Википедия похоже не согласна с Вами :)

+ реляционная алгебра :-)
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38465518
ak-47
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ikir+ реляционная алгебра :-)
обоснуй
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38465589
Ikir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ak-47,

Ну вы выполните
select * from _aaa a
left join _bbb b on a.id = b.id
без WHERE и увидите сколько у вас записей имеют b.id is NULL.
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38465595
ak-47
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ikir, я то это выполнил более десятка раз, и здесь писал, что их нет. И нет значение a.id, которых нет в b.id.
Выполните вы
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38465605
Ikir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ak-47Ikir, я то это выполнил более десятка раз, и здесь писал, что их нет. И нет значение a.id, которых нет в b.id.
Выполните вы

Вы на ходу меняете правила игры, а я так не играю.
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38465617
ak-47
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ikir, первый пост был, к сожалению ошибочным, я сразу исправился. Более правила игры не менялись.
Впрочем это ваше право. Не стОит.
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38465678
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ak-47Еще разок

Создаем:
Код: sql
1.
2.
3.
create table _aaa (id serial not null, name varchar(32));

create table _bbb (id serial not null, name varchar(32));



Вставляем:
Код: sql
1.
2.
3.
insert into _aaa (name) values ('ABCDEFGHIJKLMNOPQRUVWXYZ');

insert into _bbb (name) values ('QWERTYUIOPASDFGHJKLZXCVBNM');



Сейчас запрос
Код: sql
1.
2.
3.
select * from _aaa a
  left join _bbb b on a.id = b.id
where b.id is null;



не возвращает записей,

Далее доводим кол-во записей в _bbb до 2048 и более

Код: sql
1.
insert into _bbb (name) select name from _bbb;



И предыдущий запрос начинает возвращать
id name id_1 name_1
1 ABCDEFGHIJKLMNOPQRUVWXYZ NULL NULL

Вы смотрели собственно значения serial в обеих таблицах?

Если значения id в таблицах _aaa и _bbb в вашем примере начинаются с 1 и последовательно возрастают, то
согласно http://pic.dhe.ibm.com/infocenter/informix/v121/topic/com.ibm.sqls.doc/ids_sqs_1033.htm
запрос
Код: sql
1.
2.
3.
select * from _aaa a
  left join _bbb b on a.id = b.id
where b.id is null;


после добавления записи в _aaa:

1. до добавления записей в _bbb запрос должен возвращать 1 запись (ибо left join к одной записи в _aaa таки не сможет пришить записи из _bbb, после чего where пропустит в результат эту строку).

2. после добавления первой и всех последующих записей в _bbb должен всегда возвращать 0 записей (ибо left join к одной записи в _aaa таки пришьёт первую запись из _bbb, после чего where не пропустит в результат эту строку).

Если это не так, баг либо в доке 12.1, либо в серваке 12.1 :)
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38465759
ak-47
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АнатоЛой, конечно смотрел, да, начинаются с 1, последовательно возрастают. Нулов нет!

Полностью согласен с докой и с вашими обоими комментариями. Условие where должно применяться на результат объединения. Т.е. в результате выполнения не должно возвращаться записей.
В 12.1 это не так, при условии большого кол-ва записей в присоединяемой таблице.

Это баг. И не доки. И немаленький.
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38465937
victor16
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ak-47Условие where должно применяться на результат объединения. Т.е. в результате выполнения не должно возвращаться записей.
В 12.1 это не так, при условии большого кол-ва записей в присоединяемой таблице.
Это баг. И не доки. И немаленький.
Можете привести работоспособный и воспроизводимый SQL-скрипт?
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38466096
ak-47
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
victor16Можете привести работоспособный и воспроизводимый SQL-скрипт?

Конечно.
Вот он.

Естественно, как добавил АнатоЛой: "значения id в таблицах _aaa и _bbb в примере начинаются с 1 и последовательно возрастают"

ЗЫ сегодня проверено еще на 12.1.UC1.DE
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38466147
Ikir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ak-47,
Несколько иные результаты :
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
-bash-3.2$ onstat -

IBM Informix Dynamic Server Version 12.10.FC2 -- On-Line -- Up 7 days 21:53:09 -- 13402112 Kbytes

-bash-3.2$ echo "select * from _aaa a
>   left join _bbb b on a.id = b.id
> ~
-bash-3.2$ echo "select count(*) from _aaa;select count(*) from _bbb;select * from _aaa a  left join _bbb b on a.id = b.id where b.id is null;" | dbaccess dbadb

Database selected.



      (count(*))

               1

1 row(s) retrieved.



      (count(*))

            4096

1 row(s) retrieved.




No rows found.



Database closed.
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38466211
ak-47
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ikir, спасибо. Значит известно и пофиксено. Как поставим FC2 - отпишусь.
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38466605
ak-47
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBM Informix Dynamic Server Version 12.10.FC2

Без изменений
Во вложении файл с оформленным работоспособным, воспроизводимым скриптом.
Результат dbaccess:
id 1
name ABC
id
name
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38466692
Ikir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ak-47,
Что то в консерватории не так.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
-bash-3.2$ dbaccess dbadb test.sql

Database selected.
Table dropped.
Table dropped.
Table created.
Table created.
1 row(s) inserted.
1 row(s) inserted.
1 row(s) inserted.
2 row(s) inserted.
4 row(s) inserted.
8 row(s) inserted.
16 row(s) inserted.
32 row(s) inserted.
64 row(s) inserted.
128 row(s) inserted.
256 row(s) inserted.
512 row(s) inserted.
1024 row(s) inserted.
2048 row(s) inserted.
4096 row(s) inserted.

No rows found.


Table dropped.


Table dropped.


Database closed.



Ну поставьте после своего SELECT еще один
select * from _bbb b where b.id = 1;...
Попробуйте объявить переменные serial8...
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38466722
ak-47
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IkirНу поставьте после своего SELECT еще один
select * from _bbb b where b.id = 1;

да здесь без проблем:
Код: sql
1.
2.
select * from _aaa a where a.id = 1;
select * from _bbb b where b.id = 1;



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
id    1
name  ABC
id
name

1 row(s) retrieved.



         id name

          1 ABC

1 row(s) retrieved.



         id name

          1 DEF

1 row(s) retrieved.
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38466768
ak-47
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подменили конфиг - заработал правильно. Разбираем настройки.
...
Рейтинг: 0 / 0
25 сообщений из 38, страница 1 из 2
Форумы / Informix [игнор отключен] [закрыт для гостей] / Загадка Informix 12
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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