Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / вольности джойна в оракле 11 / 20 сообщений из 20, страница 1 из 1
26.11.2019, 11:45
    #39894359
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вольности джойна в оракле 11
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

WITH
s AS
(
SELECT 1 ID FROM dual
)
SELECT *
  FROM s s1
  join s s2 on s2.id = s1.id
  join s s2 on s2.id = s1.id
  

IDID_1ID_2111

мсскл не пропускает
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
WITH
s AS
(
SELECT 1 ID
)
SELECT *
  FROM s s1
  JOIN s s2 ON s2.id = s1.id
  JOIN s s2 ON s2.id = s1.id
Сообщение 1011, уровень 16, состояние 1, строка 1
The correlation name 's2' is specified multiple times in a FROM clause.
  
...
Рейтинг: 0 / 0
26.11.2019, 11:55
    #39894369
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вольности джойна в оракле 11
andreymx,

Погрешности преобразования ansi-джоина при парсе.
...
Рейтинг: 0 / 0
26.11.2019, 12:10
    #39894380
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вольности джойна в оракле 11
andreymx,

так интересней
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
SQL> ed
Wrote file afiedt.buf

  1  WITH
  2   s1 AS (SELECT 1 ID,1 d FROM dual)
  3  ,s2 AS (SELECT 1 ID,2 d FROM dual)
  4  ,s3 AS (SELECT 1 ID,3 d FROM dual)
  5  ,s4 AS (SELECT 2 ID,4 d FROM dual union all SELECT 3 ID,5 d FROM dual)
  6  SELECT *
  7    FROM s1 s1
  8    join s2 s2 on s2.id = s1.d
  9    join s3 s2 on s2.id = s1.d
 10*   join s4 s4 on s4.id = s2.d
SQL> /

        ID          D         ID          D         ID          D         ID          D
---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
         1          1          1          2          1          3          2          4



.....
stax
...
Рейтинг: 0 / 0
26.11.2019, 12:11
    #39894381
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вольности джойна в оракле 11
-2-
andreymx,

Погрешности преобразования ansi-джоина при парсе.
у меня же слабое сердце, а тут такое (
...
Рейтинг: 0 / 0
26.11.2019, 12:43
    #39894408
Taureg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вольности джойна в оракле 11
Stax
andreymx,

так интересней
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
SQL> ed
Wrote file afiedt.buf

  1  WITH
  2   s1 AS (SELECT 1 ID,1 d FROM dual)
  3  ,s2 AS (SELECT 1 ID,2 d FROM dual)
  4  ,s3 AS (SELECT 1 ID,3 d FROM dual)
  5  ,s4 AS (SELECT 2 ID,4 d FROM dual union all SELECT 3 ID,5 d FROM dual)
  6  SELECT *
  7    FROM s1 s1
  8    join s2 s2 on s2.id = s1.d
  9    join s3 s2 on s2.id = s1.d
 10*   join s4 s4 on s4.id = s2.d
SQL> /

        ID          D         ID          D         ID          D         ID          D
---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
         1          1          1          2          1          3          2          4



.....
stax


сам себя запутал алиесами
...
Рейтинг: 0 / 0
26.11.2019, 13:15
    #39894443
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вольности джойна в оракле 11
Taureg

сам себя запутал алиесами

странно что не слетает (ORA-00918: column ambiguously defined), ведь из запроса непонятно из какой таблицы брать d (2 или 3)

.....
stax
...
Рейтинг: 0 / 0
26.11.2019, 13:18
    #39894446
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вольности джойна в оракле 11
Stax
Taureg

сам себя запутал алиесами

странно что не слетает (ORA-00918: column ambiguously defined), ведь из запроса непонятно из какой таблицы брать d (2 или 3)

.....
stax
а ведь ещё сам elic предупреждал
что оракле не любит анси соединений
...
Рейтинг: 0 / 0
26.11.2019, 13:23
    #39894451
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вольности джойна в оракле 11
Stax
Taureg

сам себя запутал алиесами

странно что не слетает (ORA-00918: column ambiguously defined), ведь из запроса непонятно из какой таблицы брать d (2 или 3)

.....
stax
я ж на этом и накололся; оттуда топик и пошёл
выводил из алиаса две колонки
а они пустые
а должны быть заполненные

получается, берутся из первого упомянутого алиаса
...
Рейтинг: 0 / 0
26.11.2019, 13:29
    #39894457
Taureg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вольности джойна в оракле 11
Stax
Taureg

сам себя запутал алиесами

странно что не слетает (ORA-00918: column ambiguously defined), ведь из запроса непонятно из какой таблицы брать d (2 или 3)

.....
stax


не более чем разрешение одним алиесом крыть 2 "таблицы"
...
Рейтинг: 0 / 0
26.11.2019, 16:11
    #39894556
SQL*Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вольности джойна в оракле 11
Stax
Taureg

сам себя запутал алиесами

странно что не слетает (ORA-00918: column ambiguously defined),
ведь из запроса непонятно из какой таблицы брать d (2 или 3)
Какая разница?
Из запроса понятно, что один хрен - таблица одна и та же... :-)
...
Рейтинг: 0 / 0
26.11.2019, 16:26
    #39894566
SQL*Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вольности джойна в оракле 11
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
SQL> select banner_full from v$version;

BANNER_FULL                                                                                                                                                     
-------------------------------------------------------------------------------
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.4.0.0.0

SQL> WITH
  2    s AS (SELECT 1 ID, 'S' AS sd FROM dual)
  3  , a AS (SELECT 1 as ID, 'AA' AS sa from dual)
  4  , b AS (SELECT 1 as ID, 'BBB' AS sb from dual)
  5  SELECT * 
  6    FROM s s1
  7    join a s2 on s2.id = s1.id
  8    join b s2 on s2.id = s1.id;

        ID S         ID SA         ID SB 
---------- - ---------- -- ---------- ---
         1 S          1 AA          1 BBB

Вооот!
Из всех трёх таблиц данные выбрались... :-)
...
Рейтинг: 0 / 0
26.11.2019, 16:28
    #39894567
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вольности джойна в оракле 11
SQL*Plus,

ну создавай тикет, чё
...
Рейтинг: 0 / 0
26.11.2019, 16:40
    #39894573
SQL*Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вольности джойна в оракле 11
andreymx
SQL*Plus,
ну создавай тикет, чё
Сейчас нет на это времени...
...
Рейтинг: 0 / 0
26.11.2019, 16:52
    #39894577
iOracleDev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вольности джойна в оракле 11
andreymx
SQL*Plus,

ну создавай тикет, чё

А что не так?))
...
Рейтинг: 0 / 0
26.11.2019, 17:29
    #39894596
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вольности джойна в оракле 11
iOracleDev
andreymx
SQL*Plus,

ну создавай тикет, чё

А что не так?))

22025446
22025551

....
stax
...
Рейтинг: 0 / 0
26.11.2019, 17:32
    #39894603
iOracleDev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вольности джойна в оракле 11
Stax,

И? Вы пока не создали ситуацию в которой будет неоднозначность, создайте и получите ошибку.
...
Рейтинг: 0 / 0
26.11.2019, 17:37
    #39894610
SQL*Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вольности джойна в оракле 11
iOracleDev
andreymx
SQL*Plus,

ну создавай тикет, чё

А что не так?))
Не так то, что нет ошибки, хотя один алиас используется для двух таблиц.
Например, как здесь, при обычном Join-снтаксисе Oracle
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SQL> L
  1  WITH
  2    s AS (SELECT 1 ID, 'S' AS sd FROM dual)
  3  , a AS (SELECT 1 as ID, 'AA' AS sa from dual)
  4  , b AS (SELECT 1 as ID, 'BBB' AS sb from dual)
  5  SELECT *
  6    FROM s s1, a s2, b s2
  7  WHERE s2.id = s1.id
  8*   AND s2.id = s1.id
SQL> /
SELECT *
       *
ERROR at line 5:
ORA-00918: column ambiguously defined
...
Рейтинг: 0 / 0
26.11.2019, 17:52
    #39894624
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вольности джойна в оракле 11
iOracleDev
Stax,

И? Вы пока не создали ситуацию в которой будет неоднозначность, создайте и получите ошибку.


join s4 s4 on s4.id = s2.d c какой таблицей соединение (s2/s3)?
Код: 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.
36.
37.
SQL> ed
Wrote file afiedt.buf

  1  WITH
  2   s1 AS (SELECT 1 ID,1 d FROM dual)
  3  ,s2 AS (SELECT 1 ID,2 d FROM dual)
  4  ,s3 AS (SELECT 1 ID,3 d FROM dual)
  5  ,s4 AS (SELECT 2 ID,4 d FROM dual union all SELECT 3 ID,5 d FROM dual)
  6  SELECT *
  7    FROM s1 s1
  8    join s2 s2 on s2.id = s1.d
  9    join s3 s2 on s2.id = s1.d
 10*   join s4 s4 on s4.id = s2.d
SQL> /

        ID          D         ID          D         ID          D         ID          D
---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
         1          1          1          2          1          3          2          4

SQL> ed
Wrote file afiedt.buf

  1  WITH
  2   s1 AS (SELECT 1 ID,1 d FROM dual)
  3  ,s2 AS (SELECT 1 ID,2 d FROM dual)
  4  ,s3 AS (SELECT 1 ID,3 d FROM dual)
  5  ,s4 AS (SELECT 2 ID,4 d FROM dual union all SELECT 3 ID,5 d FROM dual)
  6  SELECT *
  7    FROM s1 s1
  8    join s3 s2 on s2.id = s1.d
  9    join s2 s2 on s2.id = s1.d
 10*   join s4 s4 on s4.id = s2.d
SQL> /

        ID          D         ID          D         ID          D         ID          D
---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
         1          1          1          3          1          2          3          5



.....
stax
...
Рейтинг: 0 / 0
26.11.2019, 18:58
    #39894668
iOracleDev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вольности джойна в оракле 11
Stax,

Забавно))
авторWhen you join more than two row sources, you can use parentheses to override default precedence. For example, the following syntax:

SELECT ... FROM a JOIN (b JOIN c) ...

PS: это не баг, это фича
...
Рейтинг: 0 / 0
26.11.2019, 19:58
    #39894702
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вольности джойна в оракле 11
SQL*Plus
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SQL> L
  1  WITH
  2    s AS (SELECT 1 ID, 'S' AS sd FROM dual)
  3  , a AS (SELECT 1 as ID, 'AA' AS sa from dual)
  4  , b AS (SELECT 1 as ID, 'BBB' AS sb from dual)
  5  SELECT *
  6    FROM s s1, a s2, b s2
  7  WHERE s2.id = s1.id
  8*   AND s2.id = s1.id
SQL> /
SELECT *
       *
ERROR at line 5:
ORA-00918: column ambiguously defined

Строго говоря, "обычный" синтаксис не запрещает использовать одинаковый алиаис у таблиц, как и не использовать алиас при повторения таблиц. А ambiguously defined можно получить и при разноименных таблицах.

Без ансишного синтаксиса оракл тоже ведет себя непоследовательно. Кушает синтаксически сомнительное обращение к разным полям по совпадающему алиасу:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
with t1(x) as (select 1 from dual),
  t2(y) as (select 2 from dual)
select t.x, t.y from t1 t, t2 t;

X Y
- -
1 2

но ругается, если в нем написать звездочку. И даже на безобидный случай:
Код: plsql
1.
2.
3.
select * from dual, dual;

ORA-00918: column ambiguously defined
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / вольности джойна в оракле 11 / 20 сообщений из 20, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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