powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / вольности джойна в оракле 11
20 сообщений из 20, страница 1 из 1
вольности джойна в оракле 11
    #39894359
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
вольности джойна в оракле 11
    #39894369
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx,

Погрешности преобразования ansi-джоина при парсе.
...
Рейтинг: 0 / 0
вольности джойна в оракле 11
    #39894380
Фотография 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
вольности джойна в оракле 11
    #39894381
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-
andreymx,

Погрешности преобразования ansi-джоина при парсе.
у меня же слабое сердце, а тут такое (
...
Рейтинг: 0 / 0
вольности джойна в оракле 11
    #39894408
Taureg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
вольности джойна в оракле 11
    #39894443
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Taureg

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

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

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

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

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

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

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

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

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

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

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

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

.....
stax


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

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

странно что не слетает (ORA-00918: column ambiguously defined),
ведь из запроса непонятно из какой таблицы брать d (2 или 3)
Какая разница?
Из запроса понятно, что один хрен - таблица одна и та же... :-)
...
Рейтинг: 0 / 0
вольности джойна в оракле 11
    #39894566
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
вольности джойна в оракле 11
    #39894567
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus,

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

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

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

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

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

22025446
22025551

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

И? Вы пока не создали ситуацию в которой будет неоднозначность, создайте и получите ошибку.
...
Рейтинг: 0 / 0
вольности джойна в оракле 11
    #39894610
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
вольности джойна в оракле 11
    #39894624
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
вольности джойна в оракле 11
    #39894668
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
вольности джойна в оракле 11
    #39894702
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
20 сообщений из 20, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / вольности джойна в оракле 11
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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