Необходимо использовать тип операции "VLOOKUP" для запроса SQL, который находит несколько значений внешнего ключа - SOS - PullRequest
0 голосов
/ 10 апреля 2020

Я выполняю относительно базовый c запрос, который находит информацию о местонахождении поддонов на складе. Запрос находит значение locn_id (внешний ключ) для текущего и конечного местоположения. locn_id - это просто идентификатор БД, с которым связано отображаемое значение в другой таблице, которую мне нужно добавить в запрос. Однако я не знаю, как присоединиться к таблице несколько раз (по одному разу для каждого столбца) ..

По сути, то, что мне нужно, похоже на функцию Excel VLOOKUP. Мне нужно решение, которое может посмотреть на мой запрос, взять значение locn_id из двух столбцов и предоставить мне значение dsp_locn из другой таблицы. Возможно ли это?

Это текущий запрос:

    Select lpn.prev_sub_locn_id "PREV LOCATION", lpn.dest_sub_locn_id "DEST LOCATION"
    FROM LPN_DETAIL
    INNER JOIN LPN ON LPN.LPN_ID = LPN_DETAIL.LPN_ID
    and LPN_FACILITY_STATUS = '50' and lpn.prev_sub_locn_id is not null;

Выходы:

    PREV LOCATION DEST LOCATION
    0102308       0085795
    0099674       0083978
    0098148       0082971
    0096834       0081068
    0096822       0080925
    0096931       0081502
    0096081       0078225

Однако эти значения бесполезны, поскольку они являются только идентификаторами БД. Мне нужен столбец в запросе, который покажет значение dsp_locn, найденное в таблице LOCN_HDR ниже:

Выводы для таблицы LOCN_HDR:

    LOCN_ID  DSP_LOCN
    0067714 C-E-091-A-1
    0067715 C-E-091-A-2
    0067717 C-E-091-B-1
    0067718 C-E-091-B-2
    0067726 C-E-093-A-1

Отказ от ответственности, я новичок sh в SQL еще так, пожалуйста, попробуйте сохранить его в основном c. Я также не могу создавать новые таблицы в БД. На любые вопросы я обязательно отвечу. Это на Oracle SQL сервере. Спасибо за помощь!

1 Ответ

1 голос
/ 10 апреля 2020

Попробуйте что-то вроде этого, вы должны включить соединение для каждого местоположения, чтобы получить его описание. Я предполагаю, что всегда есть описание для любого местоположения.

Select ORIGIN_LOC.DSP_LOCN "PREV LOCATION", DESTINATION_LOC.DSP_LOCN "DEST LOCATION"
FROM LPN_DETAIL
INNER JOIN LPN ON LPN.LPN_ID = LPN_DETAIL.LPN_ID
INNER JOIN LOCN_HDR AS ORIGIN_LOC ON ORIGIN_LOC.LOCN_ID = lpn.prev_sub_locn_id
INNER JOIN LOCN_HDR AS DESTINATION_LOC ON DESTINATION_LOC.LOCN_ID = lpn.dest_sub_locn_id
and LPN_FACILITY_STATUS = '50' and lpn.prev_sub_locn_id is not null;

Надеюсь, это поможет!

...