TEST_PLAN_MAIN表的TEST_CODE字段中存储的是1到多个用逗号隔开的M_INSPECTION_INFO表的主键GID,在2023年之前的达梦数据库版本中写sql关联这两个表
时间: 2024-12-10 12:35:31 浏览: 13
在2023年之前,达梦数据库(DAMO)中,如果你想关联`TEST_PLAN_MAIN`表和`M_INSPECTION_INFO`表,基于`TEST_PLAN_MAIN`的`TEST_CODE`字段包含了多个`M_INSPECTION_INFO`表的GID,你可以使用`INSTR`和`SUBSTRING`函数以及`JOIN`来实现。假设`GID`是`M_INSPECTION_INFO`表的主键,你可以尝试以下SQL语句:
```sql
SELECT tp.*, mi.*
FROM TEST_PLAN_MAIN tp
CROSS JOIN M_INSPECTION_INFO mi -- 先全连接获取所有组合
WHERE EXISTS ( -- 然后筛选出匹配的GID
SELECT 1
FROM STRING_SPLIT(tp.TEST_CODE, ',') -- 使用STRING_SPLIT函数拆分GID列表
WHERE SUBSTRING(mi.GID, LENGTH(mi.GID) - LENGTH(StringValue) + 1, LENGTH(StringValue)) = StringValue -- 比较每个GID
)
ORDER BY tp.TP_ID, mi.MI_ID;
```
注意,这里假设`STRING_SPLIT`函数可用,这是PostgreSQL中的函数,在早期的达梦版本中可能需要使用其他方法(如自定义循环或者临时表)。另外,如果你的数据库不支持`STRING_SPLIT`,则可能需要手动遍历`TEST_CODE`中的每个GID并与`M_INSPECTION_INFO`中的GID逐个比较。
阅读全文