需要对查找多个外键值的 SQL 查询使用“VLOOKUP”类型的操作 - SOS
Posted
技术标签:
【中文标题】需要对查找多个外键值的 SQL 查询使用“VLOOKUP”类型的操作 - SOS【英文标题】:Need to Use a "VLOOKUP" Type of Operation on SQL Query That Finds Multiple Foreign Key Values- SOS 【发布时间】:2020-04-10 19:46:14 【问题描述】:我正在运行一个相对基本的查询来查找仓库中的托盘位置信息。查询查找当前位置和目标位置的 locn_id(外键)值。 locn_id 只是一个数据库 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
然而,这些值是无用的,因为它们只是 DB id。我需要在查询中有一列显示在下面的 LOCN_HDR 表中找到的 dsp_locn 值:
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
免责声明,我对 SQL 还很陌生,所以请尽量保持基本。我也无法在数据库中创建新表。任何问题我一定会回复。这是在 Oracle SQL Server 上。感谢您的帮助!
【问题讨论】:
向我们展示一些示例表数据。 (匹配) 我有点好奇;您似乎知道如何使用 INNER JOIN,因为您的查询已经有一个,并且连接实际上是 VLOOKUP - 您错过的灯泡时刻只是“您知道您可以将多个连接放入查询”吗? (还有,在那之后,“你知道你可以多次将同一个表加入到一个查询中吗?) 【参考方案1】:尝试这样的方法,您应该为每个位置添加一个连接以获得其描述。我假设总是有任何位置的描述。
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;
希望对你有帮助!
【讨论】:
确实,David 的帖子提出的关键点是,同一个表可以一次又一次地连接到一个查询中,如果需要的话,连接的次数与要连接的列一样多。如果tblPerson
有几列,例如homeAddressId, workAddressId, holidayHomeAddressId, schoolAddressId, correspondenceAddressId, bankingAddressId, parent1AddressId, parent2AddressId...
,那么您真的可以将地址表加入八次 次,加入所有不同的ID,以在一行中获取所有不同的地址以上是关于需要对查找多个外键值的 SQL 查询使用“VLOOKUP”类型的操作 - SOS的主要内容,如果未能解决你的问题,请参考以下文章