Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Informix [игнор отключен] [закрыт для гостей] / SQL / 9 сообщений из 9, страница 1 из 1
29.10.2008, 18:28
    #35623883
Leonid Vorontsov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL
Здравствуйте!

Предположим, имеется следующая схема:

Код: plaintext
1.
create table tab1 ( i1 int );
create table tab2 ( i2 int );

Кажется совершенно логичным, что запрос:

Код: plaintext
select i2 from tab1;

Даёт ошибку -217 (колонка не найдена). Но кажется совершенно нелогичным, что запрос:

Код: plaintext
select * from tab2 where i2 not in ( select i2 from tab1 );

выполняется безошибочно... Есть какие-то камментарии?
...
Рейтинг: 0 / 0
29.10.2008, 19:54
    #35624056
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL
Leonid Vorontsov
выполняется безошибочно... Есть какие-то камментарии?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SQL> create table tab1 ( i1 int );
Table created.

SQL> create table tab2 ( i2 int );
Table created.

SQL> select * from tab2 where i2 not in ( select i2 from tab1 );
no rows selected

SQL> disc
Disconnected from Oracle9i Enterprise Edition Release 9.2.0.8.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.8.0 - Production
...
Рейтинг: 0 / 0
29.10.2008, 20:38
    #35624112
Выбегалло
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL
Leonid VorontsovЗдравствуйте!

Предположим, имеется следующая схема:

Код: plaintext
1.
create table tab1 ( i1 int );
create table tab2 ( i2 int );

Кажется совершенно логичным, что запрос:

Код: plaintext
select i2 from tab1;

Даёт ошибку -217 (колонка не найдена). Но кажется совершенно нелогичным, что запрос:

Код: plaintext
select * from tab2 where i2 not in ( select i2 from tab1 );

выполняется безошибочно... Есть какие-то камментарии?

баг
...
Рейтинг: 0 / 0
29.10.2008, 20:58
    #35624136
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
$ psql -U zabbixuser zabbix
Password for user zabbixuser: 
Welcome to psql 8.3.1, the PostgreSQL interactive terminal.

zabbix=> create table tab1 ( i1 int );
CREATE TABLE
zabbix=> create table tab2 ( i2 int );
CREATE TABLE
zabbix=> select * from tab2 where i2 not in ( select i2 from tab1 );
 i2 
----
(0 rows)
...
Рейтинг: 0 / 0
29.10.2008, 21:00
    #35624139
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
$ mysql zabbix
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 449695
Server version: 5.0.51a-log SUSE MySQL RPM

mysql> create table tab1 ( i1 int );
Query OK, 0 rows affected (0.14 sec)

mysql> create table tab2 ( i2 int );
Query OK, 0 rows affected (0.07 sec)

mysql> select * from tab2 where i2 not in ( select i2 from tab1 );
Empty set (0.09 sec)
...
Рейтинг: 0 / 0
29.10.2008, 22:33
    #35624212
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL
Денис, прекрати издеваться над честным народом :)

Код: plaintext
select * from tab2 where i2 not in ( select i2 from tab1 );
=
Код: plaintext
select tab2.* from tab2 where tab2.i2 not in ( select tab2.i2 from tab1 );

и независимо от наполнения строками или их отсутствием, результат буит "0 rows" :)

1. "Учите матчасть"
2. Не ленитесь, и всегда пишите алиас столбцам :)
...
Рейтинг: 0 / 0
29.10.2008, 22:35
    #35624215
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL
АнатоЛойи независимо от наполнения строками или их отсутствием, результат буит "0 rows" :)


Хотя может быть я и погорячился насчёт "всегда" - надо посмотреть на варианты с NULL...

Но такой облом :) (эту фразу можно отнести как к предыдущему предложению, так и к топику в целом :)...
...
Рейтинг: 0 / 0
30.10.2008, 11:57
    #35625094
vasilis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL
ВыбегаллоLeonid Vorontsov
Код: plaintext
select * from tab2 where i2 not in ( select i2 from tab1 );
выполняется безошибочно... Есть какие-то камментарии?
баг
Что, вот так у всех производителей, продемонстрированных Денисом, и баг ?
Скорее всего, "by design", т.е. по стандарту :)
...
Рейтинг: 0 / 0
30.10.2008, 12:11
    #35625143
vasilis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL
Leonid VorontsovЗдравствуйте!
Предположим, имеется следующая схема:
Код: plaintext
1.
create table tab1 ( i1 int );
create table tab2 ( i2 int );
Кажется совершенно логичным, что запрос:
Код: plaintext
select i2 from tab1;
Даёт ошибку -217 (колонка не найдена). Но кажется совершенно нелогичным, что запрос:
Код: plaintext
select * from tab2 where i2 not in ( select i2 from tab1 );
выполняется безошибочно... Есть какие-то камментарии?
Логика присутствует, хотя и не такая очевидная.
Во втором случае ведь i2 присутствует (хоть и в другой таблице, но из этого же запроса)
поэтому сработывает принцип неявной подстановки.
Как и в случае неявного преобразования типов это имеет как свои плюсы, так и минусы.
...
Рейтинг: 0 / 0
Форумы / Informix [игнор отключен] [закрыт для гостей] / SQL / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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