oracleA表中todeptid列用逗号隔开存储,怎么B表中ID列进行一一对应
时间: 2024-03-16 16:45:35 浏览: 93
如果A表中的todeptid列用逗号隔开存储,那么您需要使用Oracle中的字符串函数来解析这个列,然后使用JOIN操作将其与B表进行匹配。假设您要匹配的列在A表中为todeptid,要匹配的列在B表中为ID,您可以使用以下语句:
```
SELECT *
FROM A
JOIN (
SELECT
REGEXP_SUBSTR(todeptid, '[^,]+', 1, LEVEL) AS ID,
ROWID AS RID
FROM A
CONNECT BY LEVEL <= REGEXP_COUNT(todeptid, ',') + 1
) parsed
ON B.ID = parsed.ID
WHERE A.ROWID = parsed.RID;
```
这个查询使用了Oracle的正则表达式函数REGEXP_SUBSTR和REGEXP_COUNT来解析todeptid列中的逗号分隔值,并将它们作为ID列返回。CONNECT BY LEVEL <= REGEXP_COUNT(todeptid, ',') + 1 则是一个递归查询,它将解析每个todeptid中的ID值。最后,JOIN操作将解析后的todeptid值与B表中的ID列进行匹配,并返回匹配的所有行。
相关问题
sqlserver 按列A分类,行转列用逗号隔开
如果你想根据某个列 A 进行分组,并将每个分组的其它列的值转换为逗号分隔的列表,可以使用 SQL Server 中的 FOR XML PATH 和 STUFF 函数。假设你有一个名为 MyTable 的表,其中有列 A、B 和 C,你可以使用以下查询:
```
SELECT A, STUFF((SELECT ', ' + B + ' - ' + C FROM MyTable WHERE A = t.A FOR XML PATH('')), 1, 2, '') AS BC_List
FROM MyTable t
GROUP BY A
```
这将返回一个结果集,其中每行代表一个分组,列 A 包含分组的值,列 BC_List 包含该分组中所有 B 和 C 值的逗号分隔列表。请注意,STUFF 函数用于删除第一个字符,因为它是不必要的逗号和空格。
oracle,行数据用逗号隔开,怎么与另一张表的一列数据进行匹配
您可以使用Oracle的JOIN操作来匹配两个表中的数据。假设您要匹配的列在表A中为A_col,要匹配的列在表B中为B_col,您可以使用以下语句:
```
SELECT *
FROM tableA
JOIN tableB
ON tableA.A_col = tableB.B_col;
```
这将返回两个表中A_col和B_col匹配的所有行。如果您只需要表A中与表B匹配的行,可以使用INNER JOIN:
```
SELECT *
FROM tableA
INNER JOIN tableB
ON tableA.A_col = tableB.B_col;
```
这将返回只有与表B中匹配的行的表A。
阅读全文