oracle查询结果字段为条件like值字段

以下是几种常见数据库(以 Oracle、MySQL 为例)中优化上述子查询并尝试获取满足 LIKE '17.4%' 条件的对应字段的思路,你可以根据实际使用的数据库环境进行调整。

Oracle 数据库

在 Oracle 中,可以使用 CASE WHEN 表达式结合条件判断来获取满足条件的具体字段值,以下是优化后的示例代码:

SELECT 
    CASE 
        WHEN o.col LIKE '17.4%' THEN o.col
        WHEN o.col_1 LIKE '17.4%' THEN o.col_1
        WHEN o.col_2 LIKE '17.4%' THEN o.col_2
        WHEN o.col_3 LIKE '17.4%' THEN o.col_3
        WHEN o.col_4 LIKE '17.4%' THEN o.col_4
    END AS matched_col
FROM 
    (
        SELECT 
            o.col,
            o.col_1,
            o.col_2,
            o.col_3,
            o.col_4
        FROM 
            table O 
        WHERE 
            -- O.id = T.id 
            AND (o.col LIKE '17.4%' or o.ocol_1 LIKE '17.4%' or o.col_2 LIKE '17.4%' or o.col_3 LIKE '17.4%' or o.col_4 LIKE '17.4%') 
        AND ROWNUM = 1
    ) o;

这里的思路是:

无论使用哪种数据库,都要注意原表结构中各个字段的数据类型等情况,确保逻辑符合你的业务需求以及数据的准确性,并且在处理复杂查询和关联条件时,要充分考虑性能方面的优化,比如合理添加索引等操作(如果符合添加索引的场景要求)。

  1. 先在子查询中筛选出符合 id 关联条件以及 LIKE '17.4%' 相关条件且只取第一条记录(通过 ROWNUM = 1 限制,不过在实际复杂场景中要注意 ROWNUM 的使用顺序等细节问题)的记录,包含了 col 及其相关的几个字段(col_1 等)。
  2. 然后在外层查询中使用 CASE WHEN 语句按照顺序依次判断哪个字段满足 LIKE '17.4%' 条件,一旦匹配就返回该字段的值,并将其作为 matched_col 列返回,这样就获取到了满足条件的那个具体字段值了。

    MySQL 数据库

    在 MySQL 中,思路类似,不过语法稍有不同,以下是示例代码:

    SELECT 
        IF(o.col LIKE '17.4%', o.col, 
            IF(o.col_1 LIKE '17.4%', o.col_1,
                IF(o.col_2 LIKE '17.4%', o.col_2,
                    IF(o.col_3 LIKE '17.4%', o.col_3,
                        IF(o.col_4 LIKE '17.4%', o.col_4, NULL)
                    )
                )
            )
        ) AS matched_col
    FROM 
        table O 
    WHERE 
        O.id= T.id
        AND (o.col LIKE '17.4%' or o.col_1 LIKE '17.4%' or o.col_2 LIKE '17.4%' or o.col_3 LIKE '17.4%' or o.col_4 LIKE '17.4%') 
    LIMIT 1;

    在 MySQL 的这段代码中:

  3. 同样是在 WHERE 子句中先根据关联条件 id 和 LIKE 相关的条件进行筛选,最后通过 LIMIT 1 来限制只取一条记录,这和 Oracle 中 ROWNUM = 1 起到类似作用但语法不同。
  4. 然后使用嵌套的 IF 函数来依次判断各个字段是否满足 LIKE '17.4%' 条件,一旦某个字段匹配就返回该字段的值,将其作为 matched_col列返回,若都不匹配则返回 NULL 。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值