使用 LIKE 运算符处理表中的多个值的 SQL

问题描述 投票:0回答:1

我有一个数字列表,保存在名为 A 的表中。我想在另一个名为 K 的表中搜索这些数字。在这个名为 K 的表中,我尝试搜索名为 PAR 的列,并且该列包含值像 A 以及其他包含字符和数字的值。

例如; 我的表A有一个号码:12312312312 表 K 列 PAR 有类似#NUM=12312312312#NA=45453#085937.....

表A包含20k数据。我正在尝试查找表 K 列 PAR 是否包含那 20k 值。我怎样才能做到这一点?

我使用 TOAD 和 ORACLE SQL。我没有使用 PL/SQL 的权限。谢谢!

sql oracle oracle-sqldeveloper toad
1个回答
0
投票

这里有一个选项,它将

par
拆分为行(仅包含数值),并将子查询结果与
a
表的
num
列(应用了
to_char
函数,以避免隐式数据类型转换和假阳性结果)。

样本数据:

SQL> WITH
  2     a (num)
  3     AS
  4        (SELECT 12312312312 FROM DUAL
  5         UNION ALL
  6         SELECT 1231 FROM DUAL
  7         UNION ALL
  8         SELECT 85937 FROM DUAL),
  9     k (par)
 10     AS
 11        (SELECT '#NUM=12312312312#NA=45453#085937' FROM DUAL
 12         UNION ALL
 13         SELECT '#XY=12319' FROM DUAL
 14         UNION ALL
 15         SELECT '#FM=1185937#NUM=1231#12310' FROM DUAL)

查询:

 16  SELECT x.par, a.num
 17    FROM a
 18         JOIN (
 19                 SELECT PAR, REGEXP_SUBSTR (par,
 20                                       '\d+',
 21                                       1,
 22                                       COLUMN_VALUE) kpar
 23                   FROM k
 24                        CROSS JOIN
 25                        TABLE (
 26                           CAST (
 27                              MULTISET (    SELECT LEVEL
 28                                              FROM DUAL
 29                                        CONNECT BY LEVEL <= REGEXP_COUNT (par, '=') + 1)
 30                                 AS SYS.odcinumberlist))
 31              ) x
 32            ON TO_CHAR (a.num) = x.kpar;

PAR                                           NUM
-------------------------------- ----------------
#NUM=12312312312#NA=45453#085937      12312312312
#FM=1185937#NUM=1231#12310                   1231

SQL>

附注你说

我没有使用 PL/SQL 的权限

没有这样的补助金。您可能无权创建 PL/SQL 命名程序单元(函数、过程、触发器、包),但您当然可以创建匿名 PL/SQL 块。

© www.soinside.com 2019 - 2024. All rights reserved.