Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.10.30;
Скачать: [xml.tar.bz2];

Вниз

Как обойти проблему связи таблиц!   Найти похожие ветки 

 
rayrom ©   (2005-09-20 09:44) [0]

Доброе время суток!

Есть проблема, нужно найти решение!
При выполнении запроса:
select a.pole1, b.pole2
from tabl1 a, tabl2 b
where a.nza = b.nza

Не выводятся значения из таблицы 1 если в таблице 2 нет записей для связи, как это обойти, чтоб в любом случае значения из таблицы 1 выводились пусть даже с пустым значением в поле2.
Оракл версии 8.


 
Sergey13 ©   (2005-09-20 09:46) [1]

where a.nza = b.nza(+)
Учите матчасть.


 
rayrom ©   (2005-09-20 09:56) [2]

2 Sergey13 - спасибо, проверим, учить некогда!


 
Fedia ©   (2005-09-20 09:56) [3]

>Учите матчасть.
ИМХО, тут надо хотя бы направление давать, в котором капать


select a.pole1, b.pole2
from tabl1 a
left join tabl2 b on
a.nza = b.nza


 
rayrom ©   (2005-09-20 10:01) [4]

2 Fedia - Оракл 8, join не поддерживатеся!!!


 
Sergey13 ©   (2005-09-20 10:06) [5]

2[2] rayrom ©   (20.09.05 09:56)
>учить некогда!
И чем ты так занят? 8-)


 
rayrom ©   (2005-09-20 10:10) [6]

2 Sergey13 - другой работы выше крыши, вот прогу пишу и то эпизодически! А работал с МуСКЛом, там джойны поддерживаются и проблем при связи с отсутствующей записью не было а тут вот в Ораклах вылезла! По этому и приходится консультироваться у Мастеров!


 
ANB ©   (2005-09-20 11:29) [7]


> rayrom ©   (20.09.05 10:10) [6]
(+) в оракле прекрасно заменяет лефт джойн.


 
rayrom ©   (2005-09-20 14:31) [8]

Мдя проблема усложнилась:
select a.pole1, b.pole2
from tabl1 a, tabl2 b
where a.nza = b.nza(+) and b.isn = (select max(b.isn) from tabl2 where a.nza=b.nza(+))

Этот запрос должен был вывести 9 записей а выводит 6, остальные 3 не имеют записей в таблице 2 для связи, а в таблице 1 они есть!!!
Что посоветуете?!!!


 
Anatoly Podgoretsky ©   (2005-09-20 14:40) [9]

Используй явное левое внешнее соединение.


 
rayrom ©   (2005-09-20 14:47) [10]

2 Anatoly Podgoretsky пример плиз!


 
Sergey13 ©   (2005-09-20 14:48) [11]

2 [8] rayrom ©   (20.09.05 14:31)
С алиасами разберись. Зачем они в подзапросе. И плюс там вроде ни к чему.


 
rayrom ©   (2005-09-20 14:53) [12]

2 Sergey13 проблема в том что вторая таблица накопительная т.е. в первой матер записи а во второй детайл записи и я для отображения последнего состояния использую подзапрос, чтоб вывело из первой мастера, а из второй последнюю запись детайла!


 
Sergey13 ©   (2005-09-20 14:56) [13]

2[12] rayrom ©   (20.09.05 14:53)
Ну так и что? Почему в подзапросе стоит a.nza=b.nza(+)?  a и b это алиасы из головного запроса. Должно быть (вроде ) tabl2.nza=a.nza


 
msguns ©   (2005-09-20 14:58) [14]

Уракл поддерживает вложенные (Select from select) запросы ?


 
Sergey13 ©   (2005-09-20 14:59) [15]

2[14] msguns ©   (20.09.05 14:58)
Угу


 
evvcom ©   (2005-09-20 15:04) [16]


>
> > rayrom ©   (20.09.05 10:10) [6]
> (+) в оракле прекрасно заменяет лефт джойн.


> Anatoly Podgoretsky ©   (20.09.05 14:40) [9]
> Используй явное левое внешнее соединение.

Нету в восьмерке LEFT JOIN, только (плюсик).


 
Anatoly Podgoretsky ©   (2005-09-20 15:05) [17]

rayrom ©   (20.09.05 14:47) [10]
Я не специалист по Ораклу, я тебе описывают как решать задачу, а конкретный синтаксис твое дело. Зачем давать пример по MS SQL если я не уверен, что он там пойдет.


 
rayrom ©   (2005-09-20 15:08) [18]

2 Sergey13 не прокатывает и такой вариант:
select a.pole1, b.pole2
from tabl1 a, tabl2 b
where a.nza = b.nza(+) and b.isn = (select max(isn) from tabl2 where table2.nza=a.nza)

Выодит теже 6 записей! Есть еще варианты?


 
msguns ©   (2005-09-20 15:11) [19]

Используй вложенную выборку через +


 
rayrom ©   (2005-09-20 15:14) [20]

2 msguns где именно ставить это +


 
Sergey13 ©   (2005-09-20 15:18) [21]

2 [18] rayrom ©   (20.09.05 15:08)
А-а-а-а. Ну дык правильно. 8-)
Ты же ограничиваешь b.isn а там только 6 значений.
Попробуй b.isn(+) =
только вряд ли пропустит такое.
Можно попробовать так

select a.pole1, b.pole2
from tabl1 a, (select nza,pole2,max(isn) from tabl2 Group by nza,pole2) b
where a.nza = b.nza(+)

Или нечто похожее изобразить.


 
msguns ©   (2005-09-20 15:26) [22]

>rayrom ©   (20.09.05 15:14) [20]
>где именно ставить это +

а подумать ?


 
rayrom ©   (2005-09-20 15:33) [23]

Ладно, чтоб избежать дальнейших непоняток привожу запрос в полном виде:
select a.nza, a.isn, a.act, a.prin_amt, (a.fam || "" "" || substr(a.ima,1,1) || "". "" || substr(a.otch,1,1) || ""."") nazv, a.marka, a.god, t.date_to, (t.ser_tal || t.n_textal) talon, a.gos_num, a.teh_op
from avt_new a, tex_osm t
where a.isn = t.isn(+) and t.key_nid = (SELECT MAX(key_nid) FROM TEX_OSM WHERE tex_osm.isn = a.isn) and a.prin_amt = 0

2 msguns было бы время не задавал бы таких вопросов!!!


 
Sergey13 ©   (2005-09-20 15:46) [24]

2[23] rayrom ©   (20.09.05 15:33)
Попробуй написать как в [21]. Кажется должно прокатить.
Писать за тебя нет времени у меня. 8-)


 
Val ©   (2005-09-20 15:47) [25]

коллеги, ну что же мы - надо по-быстренькому напрячься и помочь ясновельможному пану rayrom ©  - у него времени нет на плюсики всякие...


 
rayrom ©   (2005-09-20 15:58) [26]

2 Sergey13 как я понял в твоем предложении [21], ты предлагаеш отобрать сразу из таблицы 2 все данные а потом их присоединять к таблице 1. Так?


 
Sergey13 ©   (2005-09-20 16:19) [27]

2[26] rayrom ©   (20.09.05 15:58)
>Так?
Угу.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2005.10.30;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.037 c
14-1128695726
ArtemESC
2005-10-07 18:35
2005.10.30
Кодировки


14-1128687708
VictorT
2005-10-07 16:21
2005.10.30
Help. Заголовки gdi+


1-1128618673
oleg_SYS
2005-10-06 21:11
2005.10.30
Как заблокировать выключение компьютера?


14-1128951238
msguns
2005-10-10 17:33
2005.10.30
Книги Донцовой.


1-1128668625
Maverick
2005-10-07 11:03
2005.10.30
Сохранение пользовательских настроек





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский