Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Как записать (+) in (:a,:b,:c)  [new]
TQuestions
Member

Откуда:
Сообщений: 115
Подскажите,пожалуйста, как составить запрос с открытым join с использованием in (:a,:b,:c)???

За ранее спасибо.
10 окт 07, 10:50    [4777865]     Ответить | Цитировать Сообщить модератору
 Re: Как записать (+) in (:a,:b,:c)  [new]
<_>
Guest
TQuestions
Подскажите,пожалуйста, как составить запрос с открытым join с использованием in (:a,:b,:c)???

За ранее спасибо.

 (my_col in (1, 2, 3) or my_col is null)
10 окт 07, 10:55    [4777909]     Ответить | Цитировать Сообщить модератору
 Re: Как записать (+) in (:a,:b,:c)  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
Воспользуйтесь ANSI-синтаксисом.
10 окт 07, 10:59    [4777934]     Ответить | Цитировать Сообщить модератору
 Re: Как записать (+) in (:a,:b,:c)  [new]
OraDen
Member

Откуда:
Сообщений: 828
Jannny
Воспользуйтесь ANSI-синтаксисом.
+1
10 окт 07, 11:00    [4777948]     Ответить | Цитировать Сообщить модератору
 Re: Как записать (+) in (:a,:b,:c)  [new]
Elic
Member

Откуда:
Сообщений: 30026
decode(x(+), :a,0, :b,0, :c,0) = 0
10 окт 07, 11:02    [4777961]     Ответить | Цитировать Сообщить модератору
 Re: Как записать (+) in (:a,:b,:c)  [new]
<_>
Guest
OraDen
Jannny
Воспользуйтесь ANSI-синтаксисом.
+1


:(
for Oracle >=9.0
10 окт 07, 11:03    [4777969]     Ответить | Цитировать Сообщить модератору
 Re: Как записать (+) in (:a,:b,:c)  [new]
TQuestions
Member

Откуда:
Сообщений: 115
У меня 9.0. Но я не знаком с ANSI.
Можете написать примерно как это будет выглядеть на примере:
select * from table1 t
where t.code(+) in ('A','B','C')

или дать ссылку, на что подобное на форуме?
10 окт 07, 11:18    [4778084]     Ответить | Цитировать Сообщить модератору
 Re: Как записать (+) in (:a,:b,:c)  [new]
OraDen
Member

Откуда:
Сообщений: 828
TQuestions
У меня 9.0. Но я не знаком с ANSI.
Можете написать примерно как это будет выглядеть на примере:
select * from table1 t
where t.code(+) in ('A','B','C')

или дать ссылку, на что подобное на форуме?
в моем сообщении +1 это ссылка на пример из документации
10 окт 07, 11:21    [4778107]     Ответить | Цитировать Сообщить модератору
 Re: Как записать (+) in (:a,:b,:c)  [new]
TQuestions
Member

Откуда:
Сообщений: 115
OraDen
TQuestions
У меня 9.0. Но я не знаком с ANSI.
Можете написать примерно как это будет выглядеть на примере:
select * from table1 t
where t.code(+) in ('A','B','C')

или дать ссылку, на что подобное на форуме?
в моем сообщении +1 это ссылка на пример из документации


У меня только доступ на этот сайт :(
10 окт 07, 11:26    [4778165]     Ответить | Цитировать Сообщить модератору
 Re: Как записать (+) in (:a,:b,:c)  [new]
xymbo
Member

Откуда: Донской --> Москва
Сообщений: 2560
TQuestions
OraDen
TQuestions
У меня 9.0. Но я не знаком с ANSI.
Можете написать примерно как это будет выглядеть на примере:
select * from table1 t
where t.code(+) in ('A','B','C')

или дать ссылку, на что подобное на форуме?
в моем сообщении +1 это ссылка на пример из документации


У меня только доступ на этот сайт :(

Проверьте, а может все-таки есть:)
10 окт 07, 11:29    [4778185]     Ответить | Цитировать Сообщить модератору
 Re: Как записать (+) in (:a,:b,:c)  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 117582
Делаем раз

SQL> select e.ename, e.deptno, d.deptno, d.dname  from scott.emp e, scott.dept d
  2  where d.deptno = e.deptno (+) and e.deptno (+) = 20
  3  /
 
ENAME      DEPTNO DEPTNO DNAME
---------- ------ ------ --------------
SMITH          20     20 RESEARCH
JONES          20     20 RESEARCH
SCOTT          20     20 RESEARCH
ADAMS          20     20 RESEARCH
FORD           20     20 RESEARCH
                      40 OPERATIONS
                      30 SALES
                      10 ACCOUNTING
 
8 rows selected
 
SQL> 
Делаем два

SQL> select e.ename, e.deptno, d.deptno, d.dname from scott.dept d left join scott.emp e
  2  on (d.deptno = e.deptno) and (e.deptno = 20)
  3  /
 
ENAME      DEPTNO DEPTNO DNAME
---------- ------ ------ --------------
SMITH          20     20 RESEARCH
JONES          20     20 RESEARCH
SCOTT          20     20 RESEARCH
ADAMS          20     20 RESEARCH
FORD           20     20 RESEARCH
                      40 OPERATIONS
                      30 SALES
                      10 ACCOUNTING
 
8 rows selected
 
SQL> 

Делаем три

SQL> select e.ename, e.deptno, d.deptno, d.dname from scott.dept d left join scott.emp e
  2  on (d.deptno = e.deptno) and (e.deptno in (20,30))
  3  /
 
ENAME      DEPTNO DEPTNO DNAME
---------- ------ ------ --------------
                      10 ACCOUNTING
SMITH          20     20 RESEARCH
JONES          20     20 RESEARCH
SCOTT          20     20 RESEARCH
ADAMS          20     20 RESEARCH
FORD           20     20 RESEARCH
ALLEN          30     30 SALES
WARD           30     30 SALES
MARTIN         30     30 SALES
BLAKE          30     30 SALES
TURNER         30     30 SALES
JAMES          30     30 SALES
                      40 OPERATIONS
 
13 rows selected
 
SQL> 
10 окт 07, 11:31    [4778209]     Ответить | Цитировать Сообщить модератору
 Re: Как записать (+) in (:a,:b,:c)  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
<_>
OraDen
Jannny
Воспользуйтесь ANSI-синтаксисом.
+1
:(
for Oracle >=9.0
Ну закинуть в подзапрос условия тоже никто не мешает.
10 окт 07, 11:35    [4778241]     Ответить | Цитировать Сообщить модератору
 Re: Как записать (+) in (:a,:b,:c)  [new]
stax..
Guest
TQuestions
У меня 9.0. Но я не знаком с ANSI.
Можете написать примерно как это будет выглядеть на примере:
select * from table1 t
where t.code(+) in ('A','B','C')

или дать ссылку, на что подобное на форуме?

странно, второй таблички для соединения нет


если это не очепятка, то что хочется получить в результате?

.....
stax
10 окт 07, 11:57    [4778408]     Ответить | Цитировать Сообщить модератору
 Re: Как записать (+) in (:a,:b,:c)  [new]
TQuestions
Member

Откуда:
Сообщений: 115
dmidek
Делаем раз

SQL> select e.ename, e.deptno, d.deptno, d.dname  from scott.emp e, scott.dept d
  2  where d.deptno = e.deptno (+) and e.deptno (+) = 20
  3  /
 
ENAME      DEPTNO DEPTNO DNAME
---------- ------ ------ --------------
SMITH          20     20 RESEARCH
JONES          20     20 RESEARCH
SCOTT          20     20 RESEARCH
ADAMS          20     20 RESEARCH
FORD           20     20 RESEARCH
                      40 OPERATIONS
                      30 SALES
                      10 ACCOUNTING
 
8 rows selected
 
SQL> 
Делаем два

SQL> select e.ename, e.deptno, d.deptno, d.dname from scott.dept d left join scott.emp e
  2  on (d.deptno = e.deptno) and (e.deptno = 20)
  3  /
 
ENAME      DEPTNO DEPTNO DNAME
---------- ------ ------ --------------
SMITH          20     20 RESEARCH
JONES          20     20 RESEARCH
SCOTT          20     20 RESEARCH
ADAMS          20     20 RESEARCH
FORD           20     20 RESEARCH
                      40 OPERATIONS
                      30 SALES
                      10 ACCOUNTING
 
8 rows selected
 
SQL> 

Делаем три

SQL> select e.ename, e.deptno, d.deptno, d.dname from scott.dept d left join scott.emp e
  2  on (d.deptno = e.deptno) and (e.deptno in (20,30))
  3  /
 
ENAME      DEPTNO DEPTNO DNAME
---------- ------ ------ --------------
                      10 ACCOUNTING
SMITH          20     20 RESEARCH
JONES          20     20 RESEARCH
SCOTT          20     20 RESEARCH
ADAMS          20     20 RESEARCH
FORD           20     20 RESEARCH
ALLEN          30     30 SALES
WARD           30     30 SALES
MARTIN         30     30 SALES
BLAKE          30     30 SALES
TURNER         30     30 SALES
JAMES          30     30 SALES
                      40 OPERATIONS
 
13 rows selected
 
SQL> 


Я понял.Большое спасибо. Но похоже это мне не поможет.
Может я не верно объяснил.
У меня одна таблица table1 в которой есть значения 'A','B',а значения 'C' нет. В итоге я хочу получить

А|значение из таблицы table1
B|значение из таблицы table1
C| 0

Я думаю должно быть что-то типа
select * from table1 t,(select 'A','B','C' from dual) d
where t.code(+) = d.

Только подзапрос d нужно развернуть по столбцам
10 окт 07, 12:45    [4778794]     Ответить | Цитировать Сообщить модератору
 Re: Как записать (+) in (:a,:b,:c)  [new]
stax..
Guest
  1  select
  2   i.dep,dname
  3  from dept d,
  4   (select '10' dep from dual
  5    union all
  6    select '20' dep from dual
  7    union all
  8    select '50' dep from dual) i
  9* where d.deptno(+)=i.dep
SQL> /

DE DNAME
-- --------------
10 ACCOUNTING
20 RESEARCH
50
.....
stax
10 окт 07, 12:50    [4778837]     Ответить | Цитировать Сообщить модератору
 Re: Как записать (+) in (:a,:b,:c)  [new]
TQuestions
Member

Откуда:
Сообщений: 115
stax..
  1  select
  2   i.dep,dname
  3  from dept d,
  4   (select '10' dep from dual
  5    union all
  6    select '20' dep from dual
  7    union all
  8    select '50' dep from dual) i
  9* where d.deptno(+)=i.dep
SQL> /

DE DNAME
-- --------------
10 ACCOUNTING
20 RESEARCH
50
.....
stax


А если таких кол-во таких значений не известно.
10 окт 07, 12:53    [4778855]     Ответить | Цитировать Сообщить модератору
 Re: Как записать (+) in (:a,:b,:c)  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 117582
TQuestions
stax..
  1  select
  2   i.dep,dname
  3  from dept d,
  4   (select '10' dep from dual
  5    union all
  6    select '20' dep from dual
  7    union all
  8    select '50' dep from dual) i
  9* where d.deptno(+)=i.dep
SQL> /

DE DNAME
-- --------------
10 ACCOUNTING
20 RESEARCH
50
.....
stax


А если таких кол-во таких значений не известно.


Ну тогда заменяете UNIONs на SELECT distinct dep from d
10 окт 07, 12:55    [4778877]     Ответить | Цитировать Сообщить модератору
 Re: Как записать (+) in (:a,:b,:c)  [new]
Бабичев Сергей
Member

Откуда:
Сообщений: 2506
TQuestions
А если таких кол-во таких значений не известно.

Тогда нужно разложить строку с перечисленными через запятую параметрами в таблицу-столбец:
select substr( my_str, 
               instr(my_str,',',1, rownum) + 1, 
               instr(my_str,',',1, rownum + 1) -  instr(my_str,',',1, rownum) - 1
             ) as new_str
  from (select ','||ltrim(rtrim(:str,','),',')||',' as my_str from dual)
 connect by level <= length(ltrim(rtrim(my_str,','),',')) - length(replace(:str,',')) + 1
где вместо :str подставляешь свою входнйю строку в формате:
'value1,value2,...,valueN'
10 окт 07, 12:58    [4778908]     Ответить | Цитировать Сообщить модератору
 Re: Как записать (+) in (:a,:b,:c)  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 117582
Бабичев Сергей
TQuestions
А если таких кол-во таких значений не известно.

Тогда нужно разложить строку с перечисленными через запятую параметрами в таблицу-столбец:
select substr( my_str, 
               instr(my_str,',',1, rownum) + 1, 
               instr(my_str,',',1, rownum + 1) -  instr(my_str,',',1, rownum) - 1
             ) as new_str
  from (select ','||ltrim(rtrim(:str,','),',')||',' as my_str from dual)
 connect by level <= length(ltrim(rtrim(my_str,','),',')) - length(replace(:str,',')) + 1
где вместо :str подставляешь свою входнйю строку в формате:
'value1,value2,...,valueN'


Сергей, ты решил, что это строка, разделенная запятыми ?
Я вначале не въехал, а теперь все же думаю,
что это просто разные колонки и тогда наверное в подзапросе

SELECT col1 from tab1
UNION
SELECT col2 from tab1
UNION 
SELECT col3 from tab1
10 окт 07, 13:01    [4778923]     Ответить | Цитировать Сообщить модератору
 Re: Как записать (+) in (:a,:b,:c)  [new]
TQuestions
Member

Откуда:
Сообщений: 115
dmidek
TQuestions
stax..
  1  select
  2   i.dep,dname
  3  from dept d,
  4   (select '10' dep from dual
  5    union all
  6    select '20' dep from dual
  7    union all
  8    select '50' dep from dual) i
  9* where d.deptno(+)=i.dep
SQL> /

DE DNAME
-- --------------
10 ACCOUNTING
20 RESEARCH
50
.....
stax


А если таких кол-во таких значений не известно.


Ну тогда заменяете UNIONs на SELECT distinct dep from d


Не очень понял. У меня на входе в процедуру будет параметр varchar = 'A','B','C'...
10 окт 07, 13:02    [4778926]     Ответить | Цитировать Сообщить модератору
 Re: Как записать (+) in (:a,:b,:c)  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 117582
dmidek
Бабичев Сергей
TQuestions
А если таких кол-во таких значений не известно.

Тогда нужно разложить строку с перечисленными через запятую параметрами в таблицу-столбец:
select substr( my_str, 
               instr(my_str,',',1, rownum) + 1, 
               instr(my_str,',',1, rownum + 1) -  instr(my_str,',',1, rownum) - 1
             ) as new_str
  from (select ','||ltrim(rtrim(:str,','),',')||',' as my_str from dual)
 connect by level <= length(ltrim(rtrim(my_str,','),',')) - length(replace(:str,',')) + 1
где вместо :str подставляешь свою входнйю строку в формате:
'value1,value2,...,valueN'


Сергей, ты решил, что это строка, разделенная запятыми ?
Я вначале не въехал, а теперь все же думаю,
что это просто разные колонки и тогда наверное в подзапросе

SELECT col1 from tab1
UNION
SELECT col2 from tab1
UNION 
SELECT col3 from tab1


А, нет, всё. Похоже , ты прав :-)

автор
Не очень понял. У меня на входе в процедуру будет параметр varchar = 'A','B','C'...
10 окт 07, 13:03    [4778930]     Ответить | Цитировать Сообщить модератору
 Re: Как записать (+) in (:a,:b,:c)  [new]
Дубовая голова
Member [заблокирован]

Откуда: с цепи сорвался
Сообщений: 1821
TQuestions

Не очень понял. У меня на входе в процедуру будет параметр varchar = 'A','B','C'...


И что на выходе ?

Читаем Кайта
10 окт 07, 13:11    [4778992]     Ответить | Цитировать Сообщить модератору
 Re: Как записать (+) in (:a,:b,:c)  [new]
OraDen
Member

Откуда:
Сообщений: 828
TQuestions
У меня одна таблица table1 в которой есть значения 'A','B',а значения 'C' нет. В итоге я хочу получить

А|значение из таблицы table1
B|значение из таблицы table1
C| 0

Я думаю должно быть что-то типа
select * from table1 t,(select 'A','B','C' from dual) d
where t.code(+) = d.

Только подзапрос d нужно развернуть по столбцам
Ты написал table1, а теперь давай ка ее структуру и тестовый набор данных, и что ты хочешь получить в результате, а то твое объяснение можно трактовать как угодно...
10 окт 07, 13:12    [4778993]     Ответить | Цитировать Сообщить модератору
 Re: Как записать (+) in (:a,:b,:c)  [new]
Бабичев Сергей
Member

Откуда:
Сообщений: 2506
dmidek
Сергей, ты решил, что это строка, разделенная запятыми ?
Я вначале не въехал, а теперь все же думаю,
что это просто разные колонки и тогда наверное в подзапросе

А, нет, всё. Похоже , ты прав :-)

автор
Не очень понял. У меня на входе в процедуру будет параметр varchar = 'A','B','C'...
Ну, нынче вопрошающие вопросы задают так, что можно трактовать их как угодно.
И тут уже каждый вправе понимать автора так, как ему убоднее. ;)
10 окт 07, 13:15    [4779021]     Ответить | Цитировать Сообщить модератору
 Re: Как записать (+) in (:a,:b,:c)  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15491
TQuestions
..Может я не верно объяснил.
У меня одна таблица table1 в которой есть значения 'A','B',а значения 'C' нет. В итоге я хочу получить

А|значение из таблицы table1
B|значение из таблицы table1
C| 0

Я думаю должно быть что-то типа
select * from table1 t,(select 'A','B','C' from dual) d
where t.code(+) = d.

Только подзапрос d нужно развернуть по столбцам

Дыкть у вас - типичный-растипичный аутерджоин.
10 окт 07, 13:20    [4779055]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить