You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PL/SQL在字符串表中匹配另一张表的指定值?

解决方案

可以通过关联查询+模糊匹配实现基于第一张表的值,在第二张表的STRING列中搜索匹配,以下是具体实现:

1. 基础SQL查询(直接获取匹配结果)

假设第一张表名为animal_list,存储动物名称的列是animal_name;第二张表名为target_table,结构为你提供的ID和STRING列。可以用INSTR函数判断STRING列是否包含表1的动物名称:

SELECT 
    t.ID,
    a.animal_name AS matched_animal
FROM 
    target_table t
JOIN 
    animal_list a ON INSTR(UPPER(t.STRING), UPPER(a.animal_name)) > 0
WHERE 
    t.ID IS NOT NULL -- 过滤表2中空行
ORDER BY 
    t.ID;

如果偏好LIKE语法,也可以这样写:

SELECT 
    t.ID,
    a.animal_name AS matched_animal
FROM 
    target_table t
JOIN 
    animal_list a ON UPPER(t.STRING) LIKE '%' || UPPER(a.animal_name) || '%'
WHERE 
    t.ID IS NOT NULL
ORDER BY 
    t.ID;

2. PL/SQL块(批量处理或控制台输出结果)

如果需要用PL/SQL执行并输出匹配结果,可使用游标遍历:

DECLARE
    CURSOR match_cursor IS
        SELECT 
            t.ID,
            a.animal_name
        FROM 
            target_table t
        JOIN 
            animal_list a ON INSTR(UPPER(t.STRING), UPPER(a.animal_name)) > 0
        WHERE 
            t.ID IS NOT NULL;
    v_id target_table.ID%TYPE;
    v_animal animal_list.animal_name%TYPE;
BEGIN
    OPEN match_cursor;
    LOOP
        FETCH match_cursor INTO v_id, v_animal;
        EXIT WHEN match_cursor%NOTFOUND;
        DBMS_OUTPUT.PUT_LINE('ID: ' || v_id || ' 匹配到动物: ' || v_animal);
    END LOOP;
    CLOSE match_cursor;
END;
/

关键说明

  • UPPER函数用于忽略大小写匹配,如果你的数据是严格大小写一致的,可以直接移除该函数。
  • INSTR返回子串在字符串中的位置,返回值>0即表示存在匹配;LIKE '%值%'是通配符匹配,两者效果一致。
  • 过滤t.ID IS NOT NULL是为了排除表2中那行空数据。

只要表2的STRING列实际包含对应动物名称(比如ID1的STRING为COWS_PINK、ID2的STRING为SAUSAGES_SHEEP),上述语句就能得到你期望的ID与动物的对应结果。

内容的提问来源于stack exchange,提问作者WanderingMushroom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 22:47:37