在我的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
子句中指定加入条件。 - 字符串文字被
'
单引号包围。使用双引号(主要是)在对象标识符(即列名称)上实施病例敏感性。