****查询相同字段的记录*****

bigmingming 2015-01-29 08:59:24
表A
id name
00000004,00000005,00000008 单杠,双杠,EE
00000006,00000007 CC,DD


表B
jobno id name
OU2015012800001 00000008 AA
OU2015012800001 00000009 BB
OU2015012800002 00000004 单杠
OU2015012800002 00000005 双杠
OU2015012800002 00000008 EE
OU2015012800003 00000007 DD


得到jobno--OU2015012800002

想从表B中找到ID号完全等于表A中ID的JOBNO号

表A记录一组ID及对应的说明,从表B中找到ID号完全等于表A中ID的JOBNO号
...全文
168 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2015-01-29
  • 打赏
  • 举报
回复
id里哪有单杠,双杠?
给出测试数据来证明有问题,不要空口说白话。
bigmingming 2015-01-29
  • 打赏
  • 举报
回复
你可以试一下 '双杠,单杠' 和 '单杠,双杠' 认为是不同
Tiger_Zhao 2015-01-29
  • 打赏
  • 举报
回复
就是考虑次序不同才用的 CHARINDEX 啊!包含就行。
bigmingming 2015-01-29
  • 打赏
  • 举报
回复
CHARINDEX(b.id,a.id)<>0 有问题 因为例如 AA,BB 也应该等于BB,AA 内容相同,次序不同也认为相同
Tiger_Zhao 2015-01-29
  • 打赏
  • 举报
回复
WITH t1 AS (
SELECT jobno,
COUNT(*) c -- 全体id数量
FROM b
GROUP BY jobno
)
,t2 AS (
SELECT b.jobno,
COUNT(*) c -- 匹配id数量
FROM b
JOIN a
ON CHARINDEX(b.id,a.id)<>0
GROUP BY b.jobno
)
SELECT t1.jobno
FROM t1
JOIN t2
ON t1.jobno = t2.jobno
WHERE t1.c = t2.c

Tiger_Zhao 2015-01-29
  • 打赏
  • 举报
回复
WITH t1 AS (
SELECT jobno,
COUNT(*) c -- 全体id数量
FROM b
GROUP BY jobno
)
,t2 AS (
SELECT b.jobno,
COUNT(*) c -- 匹配id数量
FROM b
JOIN a
ON CHARINDEX(b.id,a.id)<>0
)
SELECT t1.jobno
FROM t1
JOIN t2
ON t1.jobno = t2.jobno
WHERE t1.c = t2.c

无涯大者 2015-01-29
  • 打赏
  • 举报
回复
select Jobno from B where Id in (select Id from A) 
供参考,不知道是不是LZ想要的结果!
bigmingming 2015-01-29
  • 打赏
  • 举报
回复
谢谢可以的,请问CHARINDEX(','+b.id+',',','+a.id+',')<>0 这样写什么意思
Ekun_sky 2015-01-29
  • 打赏
  • 举报
回复
with a(id,name) as
(select '00000004,00000005,00000008','单杠,双杠,EE'
 union all
 select '00000006,00000007','CC,DD')
 ,b(jobno,id,name) as
 (select 'OU2015012800001','00000008','AA' union all
  select 'OU2015012800001','00000009','BB' union all
  select 'OU2015012800002','00000004','单杠' union all
  select 'OU2015012800002','00000005','双杠' union all
  select 'OU2015012800002','00000008','EE' union all
  select 'OU2015012800003','00000007','DD')
  
  select jobno  from 
  (select aid,jobno,COUNT(*) as 个数   from 
  (select a.id as aid,b.jobno,b.id as bid from a,b
  where CHARINDEX(','+b.id+',',','+a.id+',')<>0
  group by a.id,b.jobno,b.id) as c group  by
  c.aid,c.jobno) as d  inner join 
  (select *,LEN(id)-LEN(replace(id,',',''))+1 as 个数
  from a) as e  on d.aid=e.id and d.个数=e.个数
  
  
  /*
      jobno
  ---------------
  OU2015012800002
  ----------------
  */
再试试
bigmingming 2015-01-29
  • 打赏
  • 举报
回复
表A id name 00000004,00000005,00000008 单杠,双杠,EE 00000006,00000007 CC,DD
Ekun_sky 2015-01-29
  • 打赏
  • 举报
回复
答案错误,请忽略!汗
Ekun_sky 2015-01-29
  • 打赏
  • 举报
回复
with a(id,name) as
(select '00000004,00000005,00000008','单杠,双杠,EE'
 union all
 select '00000006,00000007','CC,DD')
 ,b(jobno,id,name) as
 (select 'OU2015012800001','00000008','AA' union all
  select 'OU2015012800001','00000009','BB' union all
  select 'OU2015012800002','00000004','单杠' union all
  select 'OU2015012800002','00000005','双杠' union all
  select 'OU2015012800002','00000008','EE' union all
  select 'OU2015012800003','00000007','DD')
  
  select d.jobno from 
  (select jobno,COUNT(bid) as 个数  from 
  (select a.id as aid,b.jobno,b.id as bid
  from a,b where charindex(','+b.id+',',','+a.id+',')<>0
  group by a.id,b.jobno,b.id) as c group by c.jobno) as d
  inner join (select *,LEN(id)-LEN(replace(ID,',',''))+1 as 个数 from a)
  as e on d.个数=e.个数
  
  /*
      jobno
  ---------------
  OU2015012800002
  ----------------
  */
  
Tiger_Zhao 2015-01-29
  • 打赏
  • 举报
回复

例子数据中b.id没有逗号!
bigmingming 2015-01-29
  • 打赏
  • 举报
回复
print charindex('A,B','B,A') print charindex('0,1','1,0') 返回都是0

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧