Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Oracle |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
TQuestions Member Откуда: Сообщений: 115 |
Подскажите,пожалуйста, как составить запрос с открытым join с использованием in (:a,:b,:c)??? За ранее спасибо. |
10 окт 07, 10:50 [4777865] Ответить | Цитировать Сообщить модератору |
<_>
Guest |
(my_col in (1, 2, 3) or my_col is null) |
||
10 окт 07, 10:55 [4777909] Ответить | Цитировать Сообщить модератору |
Jannny Member Откуда: Спб Сообщений: 6424 |
Воспользуйтесь ANSI-синтаксисом. |
10 окт 07, 10:59 [4777934] Ответить | Цитировать Сообщить модератору |
OraDen Member Откуда: Сообщений: 828 |
|
||
10 окт 07, 11:00 [4777948] Ответить | Цитировать Сообщить модератору |
Elic Member Откуда: Сообщений: 30026 |
decode(x(+), :a,0, :b,0, :c,0) = 0 |
10 окт 07, 11:02 [4777961] Ответить | Цитировать Сообщить модератору |
<_>
Guest |
:( for Oracle >=9.0 |
||||
10 окт 07, 11:03 [4777969] Ответить | Цитировать Сообщить модератору |
TQuestions Member Откуда: Сообщений: 115 |
У меня 9.0. Но я не знаком с ANSI. Можете написать примерно как это будет выглядеть на примере: select * from table1 t where t.code(+) in ('A','B','C') или дать ссылку, на что подобное на форуме? |
10 окт 07, 11:18 [4778084] Ответить | Цитировать Сообщить модератору |
OraDen Member Откуда: Сообщений: 828 |
|
||
10 окт 07, 11:21 [4778107] Ответить | Цитировать Сообщить модератору |
TQuestions Member Откуда: Сообщений: 115 |
У меня только доступ на этот сайт :( |
||||
10 окт 07, 11:26 [4778165] Ответить | Цитировать Сообщить модератору |
xymbo Member Откуда: Донской --> Москва Сообщений: 2560 |
Проверьте, а может все-таки есть:) |
||||||
10 окт 07, 11:29 [4778185] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Jannny Member Откуда: Спб Сообщений: 6424 |
|
||||||
10 окт 07, 11:35 [4778241] Ответить | Цитировать Сообщить модератору |
stax..
Guest |
странно, второй таблички для соединения нет если это не очепятка, то что хочется получить в результате? ..... stax |
||
10 окт 07, 11:57 [4778408] Ответить | Цитировать Сообщить модератору |
TQuestions Member Откуда: Сообщений: 115 |
Я понял.Большое спасибо. Но похоже это мне не поможет. Может я не верно объяснил. У меня одна таблица 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] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
TQuestions Member Откуда: Сообщений: 115 |
А если таких кол-во таких значений не известно. |
||
10 окт 07, 12:53 [4778855] Ответить | Цитировать Сообщить модератору |
dmidek Member Откуда: Киев - Дортмунд Сообщений: 117582 |
Ну тогда заменяете UNIONs на SELECT distinct dep from d |
||||
10 окт 07, 12:55 [4778877] Ответить | Цитировать Сообщить модератору |
Бабичев Сергей Member Откуда: Сообщений: 2506 |
Тогда нужно разложить строку с перечисленными через запятую параметрами в таблицу-столбец: 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] Ответить | Цитировать Сообщить модератору |
dmidek Member Откуда: Киев - Дортмунд Сообщений: 117582 |
Сергей, ты решил, что это строка, разделенная запятыми ? Я вначале не въехал, а теперь все же думаю, что это просто разные колонки и тогда наверное в подзапросе SELECT col1 from tab1 UNION SELECT col2 from tab1 UNION SELECT col3 from tab1 |
||||
10 окт 07, 13:01 [4778923] Ответить | Цитировать Сообщить модератору |
TQuestions Member Откуда: Сообщений: 115 |
Не очень понял. У меня на входе в процедуру будет параметр varchar = 'A','B','C'... |
||||||
10 окт 07, 13:02 [4778926] Ответить | Цитировать Сообщить модератору |
dmidek Member Откуда: Киев - Дортмунд Сообщений: 117582 |
А, нет, всё. Похоже , ты прав :-)
|
||||||||
10 окт 07, 13:03 [4778930] Ответить | Цитировать Сообщить модератору |
Дубовая голова Member [заблокирован] Откуда: с цепи сорвался Сообщений: 1821 |
И что на выходе ? ![]() Читаем Кайта |
||
10 окт 07, 13:11 [4778992] Ответить | Цитировать Сообщить модератору |
OraDen Member Откуда: Сообщений: 828 |
|
||
10 окт 07, 13:12 [4778993] Ответить | Цитировать Сообщить модератору |
Бабичев Сергей Member Откуда: Сообщений: 2506 |
И тут уже каждый вправе понимать автора так, как ему убоднее. ;) |
||||
10 окт 07, 13:15 [4779021] Ответить | Цитировать Сообщить модератору |
orawish Member Откуда: Гадюкино-2 (City) Сообщений: 15491 |
Дыкть у вас - типичный-растипичный аутерджоин. |
||
10 окт 07, 13:20 [4779055] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Все форумы / Oracle | ![]() |