SELECT 匹配表.匹配后, 当日工单.区县, 当日工单.所属维护网格, 当日工单.实际施工人员单位, 当日工单.id
FROM `当日工单` LEFT JOIN 匹配表 ON CONCAT(当日工单.实际施工人员单位,当日工单.所属维护网格,当日工单.区县) like concat( '%',匹配表.匹配前, '%')
可以匹配出来 但是比原先的多了 打个比方当日工单.实际施工人员单位匹配为空则进行当日工单.所属维护网格进行匹配
然后再通过 当日工单.区县 进行匹配
```sql
SELECT 匹配表.匹配后, 当日工单.区县, 当日工单.所属维护网格, 当日工单.实际施工人员单位, 当日工单.id ,(
CASE
WHEN 匹配表.匹配后 is null
THEN
(select 当日工单.区县 from 当日工单 where `id` =1 )
ELSE 匹配表.匹配后
END ) 匹配表后
FROM `当日工单` LEFT JOIN 匹配表 ON 当日工单.实际施工人员单位 like concat( '%',匹配表.匹配前, '%') ;
然后试着这样弄 也不行id
=1 的勉强可以 但是 id=1 固定了 写成 id
=当日工单.id 不行
如果问题可以解决 悬赏力度可以加大
实在不行的话反正也就三个字段,分别查了之后union all好像也行
SELECT * FROM 匹配表 A,工单表 B WHERE B.单位 LIKE A.匹配前
UNION ALL
SELECT * FROM 匹配表 A,工单表 B WHERE B.单位 NOT LIKE A.匹配前 AND B.网格 LIKE A.匹配前
UNION ALL
SELECT * FROM 匹配表 A,工单表 B WHERE B.单位 NOT LIKE A.匹配前 AND B.网格 NOT LIKE A.匹配前 AND B.区县 LIKE A.匹配前
连接条件,ON CONCAT(当日工单.实际施工人员单位,当日工单.所属维护网格,当日工单.区县) like concat( '%',匹配表.匹配前, '%') 这么写怎么理解。
你要把你的表结构,存储数据的格式,以及你要的结果,都描述清楚,才能知道你的问题在哪呀,看半天,不明白你表结构是是怎样的,存储数据的格式怎样的,以及你要的结果又是什么
有点没看懂问题描述,是不是这个意思:
查询的关键字是“匹配表”的【匹配前】,然后先模糊查询“当日工单”的【实际施工人员单位】字段,如果能查到结果就匹配这个;如果【单位】字段没有查到任何匹配结果,就接着查【网格】字段;如果前两个字段都没匹配上就查【县区】字段。
如果是这样的话可以用ifnull
SELECT A.匹配后,
IFNULL(IFNULL(B.单位,C.单位),D.单位) 单位,
IFNULL(IFNULL(B.网格,C.网格),D.网格) 网格,
IFNULL(IFNULL(B.县区,C.县区),D.县区) 县区,
FROM 匹配表 A
LEFT JOIN 工单表 B ON B.单位 LIKE '%'+A.匹配前+'%'
LEFT JOIN 工单表 C ON C.单位 NOT LIKE '%'+A.匹配前+'%' AND C.网格 LIKE '%'+A.匹配前+'%'
LEFT JOIN 工单表 D ON D.单位 NOT LIKE '%'+A.匹配前+'%' AND D.网格 NOT LIKE '%'+A.匹配前+'%' AND D.县区 LIKE '%'+A.匹配前+'%'
差不多是这个意思