连接数字包含在字符串中



在我的Oracle数据库中,我有2个表,我必须加入它们,在表A中,我的列ID是数字,以及表B,其中我的列SCIDS是Varchar2。这是一个例子:

TABLEA.ID | TABLEB.SCIDS
162       | 162,163
162       | 555,162,33
161       | 161

我尝试了一些SQL

select A.ID
from TABLEA A
    left JOIN TABLEB B 
where "," || S.ID in "," || B.SCIDS

这不起作用,它仅返回SCID中不是"数组"的记录,例如3rd Rocord 161。

如何返回全部?

您可以尝试一下,尽管不是完全有效的一个

with dist_tablea
     AS (SELECT DISTINCT ID
           FROM TABLEA)
SELECT a.ID, B.SCIDS
  FROM dist_tablea a LEFT JOIN TABLEB b ON REGEXP_LIKE (b.SCIDS, '(^|,)'||a.id||'(,|$)')

输出

    ID  SCIDS
-------  -------
    161 161
    162 162,163
    162 555,162,33

两个字段之前和之后的连接逗号,然后使用LIKE操作员:

sql小提琴

Oracle 11G R2架构设置

CREATE TABLE TABLEA( ID ) AS
  SELECT 161 FROM DUAL UNION ALL
  SELECT 162 FROM DUAL;
CREATE TABLE TABLEB( SCIDS ) AS
  SELECT '162,163' FROM DUAL UNION ALL
  SELECT '555,162,33' FROM DUAL UNION ALL
  SELECT '161' FROM DUAL;

查询1

SELECT *
FROM   TABLEA A
       LEFT OUTER JOIN TABLEB B
       ON ( ',' || B.SCIDS || ',' LIKE '%,' || A.ID || ',%' )

结果

|  ID |      SCIDS |
|-----|------------|
| 161 |        161 |
| 162 |    162,163 |
| 162 | 555,162,33 |

也:

  • 当您使用LEFT [OUTER] JOIN时,您需要在ON子句中指定加入条件。
  • 字符串文字被'单引号包围。使用双引号(主要是)在对象标识符(即列名称)上实施病例敏感性。

相关内容

最新更新