核心
對兩張表的關聯字段左右兩邊同時加上分隔符,然後使用instr()
函數判斷是否存在
instr(','||class_student.student_id||',' , ','||student.student_id||',') > 0
數據
student(學生表)
學生編號 | 學生姓名 |
---|---|
1 | 張三 |
2 | 李四 |
3 | 王五 |
class_student(班級學生關係表)
班級編號 | 學生編號 |
---|---|
1 | 1,2 |
2 | 3 |
3 | 4 |
應用
1. 標題查詢學生所在班級(一個字段存多個ID(以逗號","分割),並用該字段與其他表的ID關聯)
with student as(--學生表
select '1' student_id,'張三' student_name from dual union
select '2' student_id,'李四' student_name from dual union
select '3' student_id,'王五' student_name from dual
),class_student as(--班級學生關係表
select '1' as class_id,'1,2' student_id from dual union
select '2' as class_id,'3' student_id from dual union
select '3' as class_id,'4' student_id from dual
)select
student.student_id,
class_student.class_id
from student
join class_student on instr(','||class_student.student_id||',' , ','||student.student_id||',') > 0
結果展示
學生編號 | 班級編號 |
---|---|
1 | 1 |
2 | 1 |
3 | 2 |
2. 獲取每個班級學生對應姓名(將存多個ID(以逗號","分割)的字段轉化成對應中文含義)
with student as(--學生表
select '1' student_id,'張三' student_name from dual union
select '2' student_id,'李四' student_name from dual union
select '3' student_id,'王五' student_name from dual
),class_student as(--班級學生關係表
select '1' as class_id,'1,2' student_id from dual union
select '2' as class_id,'3' student_id from dual union
select '3' as class_id,'4' student_id from dual
)select
class_student.class_id,
(select listagg(student.student_name, ',') within group(order by student.student_id) from student where instr(','||class_student.student_id||',' , ','||student.student_id||',') > 0) student_name
from class_student
結果展示
班級編號 | 學生姓名 |
---|---|
1 | 張三,李四 |
2 | 王五 |
3 |