Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как обойти проблему связи таблиц! [D7]


Страницы:   1 2

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 они есть!!!
Что посоветуете?!!!


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо