powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Странности в подзапросе
6 сообщений из 6, страница 1 из 1
Странности в подзапросе
    #39785458
aspirant82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот такой пример (Oracle 12) - исходный был сложнее - я его упростил до минимума:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
with table1 as (                 
          select 1 as field from DUAL 
             union
          select 2 as field from DUAL
             union
          select 5 as field from DUAL
) 
select field from table1 
where 2 = (select min(field) from dual) or
      1 = (select max(field) from dual)



Результат запроса - 2 строки
_
Код: plsql
1.
2.
1
2



Не могу понять, почему это в принципе выполняется (по-моему мнению, подзапрос не должен видеть поле внешней таблицы) и как оно работает )
Плиз, хелп...
...
Рейтинг: 0 / 0
Странности в подзапросе
    #39785461
Melkomyagkii_newbi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
      
DECLARE

  l_clob CLOB;

BEGIN

  DBMS_UTILITY.expand_sql_text (

    input_sql_text  => 'with table1 as (                 
          select 1 as field from DUAL 
             union
          select 2 as field from DUAL
             union
          select 5 as field from DUAL
) 
select field from table1 
where 2 = (select min(field) from dual) or
      1 = (select max(field) from dual)',

    output_sql_text => l_clob

  );

  DBMS_OUTPUT.put_line(l_clob);

END;




Код: 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.
SELECT
        "A1"."FIELD" "FIELD"
FROM
        (
                ( SELECT
                        1 "FIELD"
                FROM
                        "SYS"."DUAL" "A7"
                ) UNION ( SELECT
                        2 "FIELD"
                FROM
                        "SYS"."DUAL" "A6"
                ) UNION ( SELECT
                        5 "FIELD"
                FROM
                        "SYS"."DUAL" "A5"
                )
        ) "A1"
WHERE
                2 = (
                        SELECT
                                MIN("A1"."FIELD") "MIN(FIELD)"
                        FROM
                                "SYS"."DUAL" "A3"
                )
        OR
                1 = (
                        SELECT
                                MAX("A1"."FIELD") "MAX(FIELD)"
                        FROM
                                "SYS"."DUAL" "A2"
                )
...
Рейтинг: 0 / 0
Странности в подзапросе
    #39785462
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sqlrf/Using-Subqueries.html#GUID-53A705B6-0358-4E2B-92ED-A83DE83DFD20 Oracle performs a correlated subquery when a nested subquery references a column from a table referred to a parent statement one level above the subquery. The parent statement can be a SELECT, UPDATE, or DELETE statement in which the subquery is nested. A correlated subquery conceptually is evaluated once for each row processed by the parent statement.
...
Рейтинг: 0 / 0
Странности в подзапросе
    #39785464
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aspirant82по-моему мнению, подзапрос не должен видеть поле внешней таблицыRTFM correlated subquery (FAQ)
...
Рейтинг: 0 / 0
Странности в подзапросе
    #39785478
merch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aspirant82,

Код: plsql
1.
2.
where 2 = (select min(field) from dual) or
      1 = (select max(field) from dual)



а что желаете получить этими min/max?
...
Рейтинг: 0 / 0
Странности в подзапросе
    #39785485
aspirant82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
merch, да я чужой код разбирал, там был подзапрос, который (как я уже понял ничего не делал) .

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


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