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

Вниз

Последняя запись в связке один ко многим, нужна помощь!!!   Найти похожие ветки 

 
RayRom ©   (2005-07-07 17:53) [0]

Имеется две таблицы, главная и подчиненная связь по уникальному полю в отношении один ко многим.
Внимание вопрос: нужно построить запрос так чтоб при получении результата была только последняя запись подчиненной таблицы, т.е. получить результат из главной и подчиненной таблицы, но из подчиненной таблицы получить только последнюю запись а не все?
Ораклы версии 8.1.5.17


 
Johnmen ©   (2005-07-07 17:56) [1]

Критерий "последности" в студию :)


 
rayrom ©   (2005-07-07 18:01) [2]

Подробно:
Главная таблица - транспорт имеет два уникальных поля
1 - НЗА - жосткая привязка к транспорту
2 - ИСН - движения транспорта т.е. измемение владельца, агрегатов и т.д.
Связь идет с подчиненной таблицей по полю НЗА, но она имеет свое уникальное поле ИСН которое автоинкрементное, т.е. накопительная информация.
Так вот нуно выбрать весь транспорт но получить из подченной таблицы только последнюю запись для данного транспорта!


 
rayrom ©   (2005-07-07 19:06) [3]

И тишина :)


 
Val ©   (2005-07-07 19:13) [4]

вы не ответили на вопрос.


 
DiamondShark ©   (2005-07-07 19:38) [5]

Вместо подчинённой таблицы использовать запрос
select top1 *
from таблица
where условие связи
order by критерий порядка записей desc


 
ЮЮ ©   (2005-07-08 03:01) [6]

>т.е. получить результат из главной и подчиненной таблицы, но из подчиненной таблицы получить только последнюю запись а не все?

Синтаксиса Ораклы не знаю. На MS SQL я бы это сделал так:

SELECT Master.*, Detail.* FROM
 Master
 LEFT JOIN (Select MasterID, Max(Detail.Id) LastId FROM Detail GROUP BY MasterID) LastDetail ON Master.Id = LastDetail.MasterID
 JOIN Detail ON LastDetail.LastId = Detail.Id,

Где Master и Detail связаны как 1..N: Master.ID = Detail.MasterID


 
kaif ©   (2005-07-08 04:25) [7]

Если нужно из двух таблиц сразу выбрать все главные записи и последнюю из каждой подчиненной (используем телепатию), то видимо потребуется LEFT OUTER JOIN  с коррелированным подчиненным запросом значения
MAX(автоинкрементного поля) к подчиненнолй таблице.

Я не знаю, как на ORACLE, но в IB это выглядело бы примерно так:

SELECT NZA
FROM <Главная_таблица> M
LEFT OUTER JOIN <Подчиненная_таблица> D
ON M.NZA = D.NZA AND
  D.ISN = (SELECT MAX(ISN)
           FROM <Подчиненная_таблица>
           WHERE NZA = M.NZA)


Думаю, что на ORACLE точно так же.


 
Кщд ©   (2005-07-08 05:17) [8]

kaif ©   (08.07.05 04:25) [7]
Можно и так.
А можно с использованием аналитических ф-ций, что позволит избежать подзапроса.


 
rayrom ©   (2005-07-08 11:10) [9]

Спасибо за ответы но в этой версии Ораклов нету JOIN и всего с ним связанного, они появились только в 9 версии!!!


 
Val ©   (2005-07-08 11:20) [10]

плюсы же есть? перевести-то запрос из диалекта в диалект не особо много ума надо.


 
kaif ©   (2005-07-08 13:48) [11]

Что за версия ORACLE без JOIN-ов?
Это разве не SQL-сервер?


 
evvcom ©   (2005-07-08 13:57) [12]


> Что за версия ORACLE без JOIN-ов?
> Это разве не SQL-сервер?

Сервер. Я с MSSQL на Oracle 9.2 сел, поэтому не испытал такого кайфа. А кто давно на Oracle сидит, те пишут типа такого:
... FROM a, b WHERE a.id (+) = b.id
по-моему это аналог RIGHT OUTER JOIN, но могу напутать, так как пишу именно через JOIN


 
evvcom ©   (2005-07-08 14:01) [13]


> А можно с использованием аналитических ф-ций, что позволит
> избежать подзапроса.

Вот этого в восьмерке точно нет.
Через rownum с order by ... desc можно, но придется использовать опять же вложенный подзапрос, т.к. сначала вычисляются все rownum, а уж потом делается order by.


 
Val ©   (2005-07-08 15:27) [14]

> [13] evvcom ©   (08.07.05 14:01)

> Вот этого в восьмерке точно нет.

Неверно. Зависит от edition. В Enterprise аналит.функции есть.
По поводу плюса - дело привычки.


 
isasa ©   (2005-07-08 15:46) [15]

Select MasterID, Max(Detail.Id) LastId FROM Detail GROUP BY MasterID)

А если ID - код репликации (GUID)
Надо доп критерий - период, дата изменения, дата регистрации ...



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

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

Наверх





Память: 0.49 MB
Время: 0.021 c
6-1115183884
Atrion
2005-05-04 09:18
2005.08.14
Реализовать метод POST с помощью idHTTP


14-1121848754
|imp|
2005-07-20 12:39
2005.08.14
Факс на delphi


14-1121956424
lookin
2005-07-21 18:33
2005.08.14
Простуда и температура воздуха...


1-1122372526
serg128
2005-07-26 14:08
2005.08.14
Как поменять цвет строки в TListBox?


3-1120485884
DelphiN!
2005-07-04 18:04
2005.08.14
Востановление "удаленных" записей из таблицы СУБД FB 1.5





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