在我的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
这不起作用它只返回SCIDS中不是“数组”的记录,例如第3条记录161。
如何全部退货?
答案 0 :(得分:2)
你可以尝试这个,但不是完全有效的
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
答案 1 :(得分:1)
在两个字段之前和之后连接逗号,然后使用LIKE
运算符:
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 || ',%' )
<强> Results 强>:
| ID | SCIDS |
|-----|------------|
| 161 | 161 |
| 162 | 162,163 |
| 162 | 555,162,33 |
此外:
LEFT [OUTER] JOIN
时,您需要在ON
子句中指定连接条件。'
单引号括起。双引号(主要用于)对对象标识符(即列名称)强制区分大小写。