Выбрать из другого результата запроса с дополнительными объединениями - PullRequest
0 голосов
/ 01 мая 2020

У меня такой запрос в SQL Сервер:

select * 
from 
    cargo as c, cargoshipment cs, 
    shipment s, shipmentbatch sb
where 
    c.id = cs.cargoid 
    and s.Id = sb.shipmentId  
    and sb.qty > 0 
    and c.arrivalDate != null

Теперь каждая таблица в приведенном выше запросе может содержать несколько версий для каждой записи. Прежде чем выбрать вышеупомянутое, я хочу, чтобы каждая таблица рассмотрела свою последнюю версию записи.

Например, чтобы выбрать последнюю версию записи в таблице car go, мне нужно присоединиться к другая таблица, например:

select * 
from cargo c 
join transaction t 
where c.txid = t.txid and status = 'latest'

Приведенный выше запрос гарантирует, что автомобиль go выберет последнюю версию записи. Я должен сделать то же самое для других трех столов. Можно ли добиться этого за один запрос?

Ответы [ 2 ]

0 голосов
/ 01 мая 2020

Как отметил @Simon в своем комментарии, трудно ответить без дополнительной информации, но если бы я догадался, вам нужно что-то вроде следующего:

select *
from cargo as c
inner join cargoshipment as cs on c.id = cs.cargoid
inner join shipment as s on s.Id = sb.shipmentId
inner join shipmentbatch sb
inner join transaction as c_t on c.txid = c_t.txid
inner join transaction as cs_t on c.txid = cs_t.txid
inner join transaction as s_t on c.txid = s_t.txid
inner join transaction as sb_t on c.txid = sb_t.txid
where sb.qty > 0
and c.arrivalDate is not null
and c_t.status = 'latest'
and cs_t.status = 'latest'
and s_t.status = 'latest'
and sb_t.status = 'latest';
0 голосов
/ 01 мая 2020

в зависимости от предоставленных вами данных может быть так:

select c.* from 
cargo c
join cargoshipment cs on c.id=cs.cargoid
join shipment s on c.Id=cs.cargoid
join shipmentbatch sb on sb.shipmentId=s.Id
join transaction t where c.txid=t.txid and status='latest'

where sb.qty > 0 and c.arrivalDate!=null
...