SQL程式設計:模糊表關聯不求人 ---> concat + like就能行
阿新 • • 發佈:2019-02-01
1、表的結構:
2、問題:
A表中的proj_dept欄位包含了多個B表中的,用逗號分隔的dept_id,那麼要如何實現A表和B表的關聯?
3、解決方法:
create table A(proj_dept varchar(30));
create table B(dept_id int,dept_name varchar(30));
insert into A values('2,3,4'),('2,4,5'),('3,4,6');
insert into B values(2,'部門2'),(3,'部門3'),(4,'部門4'),(5,'部門5'),(6,'部門6');
mysql> select * from A; +-----------+ | proj_dept | +-----------+ | 2,3,4 | | 2,4,5 | | 3,4,6 | +-----------+ 3 rows in set (0.01 sec) mysql> select * from B; +---------+-----------+ | dept_id | dept_name | +---------+-----------+ | 2 | 部門2 | | 3 | 部門3 | | 4 | 部門4 | | 5 | 部門5 | | 6 | 部門6 | +---------+-----------+ 5 rows in set (0.02 sec)
2、問題:
A表中的proj_dept欄位包含了多個B表中的,用逗號分隔的dept_id,那麼要如何實現A表和B表的關聯?
3、解決方法:
select * from A,B
where concat(',',A.proj_dept,',') like concat('%,',cast(B.dept_id as char),',%')
order by proj_dept,dept_id;
mysql> select * from A,B -> where concat(',',A.proj_dept,',') like concat('%,',cast(B.dept_id as char),',%') -> order by proj_dept,dept_id; +-----------+---------+-----------+ | proj_dept | dept_id | dept_name | +-----------+---------+-----------+ | 2,3,4 | 2 | 部門2 | | 2,3,4 | 3 | 部門3 | | 2,3,4 | 4 | 部門4 | | 2,4,5 | 2 | 部門2 | | 2,4,5 | 4 | 部門4 | | 2,4,5 | 5 | 部門5 | | 3,4,6 | 3 | 部門3 | | 3,4,6 | 4 | 部門4 | | 3,4,6 | 6 | 部門6 | +-----------+---------+-----------+ 9 rows in set (0.01 sec)