![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как обойти проблему связи таблиц! [D7]
rayrom © (2005-09-20 09:44:00)Доброе время суток!
Есть проблема, нужно найти решение!
При выполнении запроса:
select a.pole1, b.pole2
from tabl1 a, tabl2 b
where a.nza = b.nza
Не выводятся значения из таблицы 1 если в таблице 2 нет записей для связи, как это обойти, чтоб в любом случае значения из таблицы 1 выводились пусть даже с пустым значением в поле2.
Оракл версии 8.
Sergey13 (2005-09-20 16:19:00) [1]2[26] rayrom © (20.09.05 15:58)
>Так?
Угу.
rayrom (2005-09-20 15:58:00) [2]2 Sergey13 как я понял в твоем предложении [21], ты предлагаеш отобрать сразу из таблицы 2 все данные а потом их присоединять к таблице 1. Так?
Val (2005-09-20 15:47:00) [3]коллеги, ну что же мы - надо по-быстренькому напрячься и помочь ясновельможному пану rayrom © - у него времени нет на плюсики всякие...
Sergey13 (2005-09-20 15:46:00) [4]2[23] rayrom © (20.09.05 15:33)
Попробуй написать как в [21]. Кажется должно прокатить.
Писать за тебя нет времени у меня. 8-)
rayrom (2005-09-20 15:33:00) [5]Ладно, чтоб избежать дальнейших непоняток привожу запрос в полном виде:
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 было бы время не задавал бы таких вопросов!!!
msguns (2005-09-20 15:26:00) [6]>rayrom © (20.09.05 15:14) [20]
>где именно ставить это +
а подумать ?
Sergey13 (2005-09-20 15:18:00) [7]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(+)
Или нечто похожее изобразить.
rayrom (2005-09-20 15:14:00) [8]2 msguns где именно ставить это +
msguns (2005-09-20 15:11:00) [9]Используй вложенную выборку через +
rayrom (2005-09-20 15:08:00) [10]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 записей! Есть еще варианты?
Anatoly Podgoretsky (2005-09-20 15:05:00) [11]rayrom © (20.09.05 14:47) [10]
Я не специалист по Ораклу, я тебе описывают как решать задачу, а конкретный синтаксис твое дело. Зачем давать пример по MS SQL если я не уверен, что он там пойдет.
evvcom (2005-09-20 15:04:00) [12]
>
> > rayrom © (20.09.05 10:10) [6]
> (+) в оракле прекрасно заменяет лефт джойн.
> Anatoly Podgoretsky © (20.09.05 14:40) [9]
> Используй явное левое внешнее соединение.
Нету в восьмерке LEFT JOIN, только (плюсик).
Sergey13 (2005-09-20 14:59:00) [13]2[14] msguns © (20.09.05 14:58)
Угу
msguns (2005-09-20 14:58:00) [14]Уракл поддерживает вложенные (Select from select) запросы ?
Sergey13 (2005-09-20 14:56:00) [15]2[12] rayrom © (20.09.05 14:53)
Ну так и что? Почему в подзапросе стоит a.nza= b.nza(+)? a и b это алиасы из головного запроса. Должно быть (вроде ) tabl2.nza=a.nza
rayrom (2005-09-20 14:53:00) [16]2 Sergey13 проблема в том что вторая таблица накопительная т.е. в первой матер записи а во второй детайл записи и я для отображения последнего состояния использую подзапрос, чтоб вывело из первой мастера, а из второй последнюю запись детайла!
Sergey13 (2005-09-20 14:48:00) [17]2 [8] rayrom © (20.09.05 14:31)
С алиасами разберись. Зачем они в подзапросе. И плюс там вроде ни к чему.
rayrom (2005-09-20 14:47:00) [18]2 Anatoly Podgoretsky пример плиз!
Anatoly Podgoretsky (2005-09-20 14:40:00) [19]Используй явное левое внешнее соединение.
rayrom (2005-09-20 14:31:00) [20]Мдя проблема усложнилась:
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 они есть!!!
Что посоветуете?!!!