注册 登录
编程论坛 SQL Server论坛

求助,一列值包含一个变量

炫幻忧伤 发布于 2015-10-28 11:24, 1566 次点击
select * from Table1
where Table1.A like
'%' + (select B from Table2 where Table2.C like :ls_D ) + '%'

:ls_D 是手动输入的,如果 B 取出一个值还好办,但如果取出 多个值的话,这句话就悲剧了。
怎么能修改成 B取出多个值也能执行的呢
本人小白一枚
14 回复
#2
Maick2015-10-28 11:48
什么需求啊.一定要这样写吗?牛逼
#3
炫幻忧伤2015-10-28 11:56
回复 2楼 Maick
是啊,程序就是这样的,我只能想到这么写,当然有好办法更好

就要实现:

表1 是  卡号   和   用户ID
表2 是  日志

如果输入 卡号 ,要找到 卡号 对应的 用户ID ,取出 用户ID,找到 日志 里 包含这个 用户ID 的

但是 如果卡号不完整,要找到 包含 这个 卡号的所有 用户ID,然后 查询 日志里 包含 这些 用户ID 的记录

能力不够,搞不定
#4
功成身退2015-10-28 12:46
select * from Table1
where A like
'%' + (select B from Table2 where C like :ls_D ) + '%'
红色标记语句返回多条记录则逻辑出错
#5
炫幻忧伤2015-10-28 12:50
回复 4楼 功成身退
嗯,一执行就不行了,有没有什么别方法能实现返回多条记录的么
#6
功成身退2015-10-28 13:26
算是集合查询范畴里的范围覆盖了,利用关键字in来个嵌套查询说不定可以
#7
Maick2015-10-28 15:56
SELECT * FROM TABLE1
JOIN TABLE2 ON TABLE1.ID=TABLE2.TABLE1_PTR
WHERE TABLE1.CARID LIKE '%用户输入的卡号%'

这样不行吗?有你想的那么负责吗
#8
Maick2015-10-28 15:56
打错字了 (复杂)
#9
炫幻忧伤2015-10-28 16:46
回复 8楼 Maick
表2中的 日志列,不等于 表1中的 ID列,只是 日志列 中的内容 包含 ID

额,其实,我接触的SQL也不多,就会写基础的而已
#10
kinvanhon2015-10-28 20:07
描述不清楚,最好给些示例数据
#11
mxbing19842015-10-29 08:52

Create TAble 表1
(卡号 Varchar(10),
 用户ID Varchar(10)
)

Create TAble 表2
(
日志 Varchar(1000)
)

insert into 表1 values('CAB001','0002')
insert into 表1 values('CAB002','1234')

insert into 表2 values('2015-10-28用户1234操作过XXXYYY')
insert into 表2 values('2015-10-29用户0002操作过888818188乱七八糟')

Select * from 表2,表1
where CHARINDEX(用户id,日志)>0
and 卡号 like '%CAB001%'
 

Select * from 表2,(Select * from 表1 where 卡号 like '%CAB001%') 表1
where CHARINDEX(用户id,日志)>0


只有本站会员才能查看附件,请 登录
#12
炫幻忧伤2015-10-29 09:34
回复 11楼 mxbing1984
3Q啦,像我这种小白果然不行
#13
Maick2015-10-29 11:04
回复 9楼 炫幻忧伤
那就连的时候不用等于呗.用like
SELECT * FROM TABLE1
JOIN TABLE2 ON TABLE1.ID LIKE  '%'+TABLE2.日志内容+'%'
WHERE TABLE1.CARID LIKE '%用户输入的卡号%'
#14
Maick2015-10-29 11:06
回复 11楼 mxbing1984
#15
yxf1272015-11-03 16:15
回复 3楼 炫幻忧伤
你把日志表的的记录贴上来几条我看看,找一下规律,用字符串函数和in可以实现。
1