Главная страница
    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.171 c
3-1127092937
DrAndrey
2005-09-19 05:22
2005.10.30
Перехват ошибки в хранимой процедуре при добавлении строки


3-1127279964
leonidus
2005-09-21 09:19
2005.10.30
Перехват нажатия "Применить" в TDBNavigator


2-1128600837
Sysanin
2005-10-06 16:13
2005.10.30
Переменные в функциях


2-1128759906
KLOD
2005-10-08 12:25
2005.10.30
помогите пожалуйста считать из типизированного файла записи


4-1124892402
NioBium
2005-08-24 18:06
2005.10.30
TrayIcon без формы





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский