需要对查找多个外键值的 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的主要内容,如果未能解决你的问题,请参考以下文章

复杂的 SQL 查询——查找匹配多个不同外键的项目

如何在Django中查询具有特定数量的外键关系并且在这些外键值中具有特定值的对象?

JPA:查询以根据实体类中定义的外键值获取结果?

SQL 数据库 子查询主外键

使用两个可以返回多个值的子查询的 SQL 之间的语句

sql中外键怎么写?