咨询:同姓同名但多一个字的查询

如是我闻2012 2018-12-21 09:34:25
比如tab_name表里有两个人的数据,不是人员(name)字段,而是信息(info_content)字段,一个叫张三,一个叫张三四
如果
select * from tab_name  where info_content like '%张三%';

查询的内容:
业务部张三今天信息。
事业部张三四出差。
......
但是会查询出张三四的信息,请问怎样才能把张三四过滤掉。不是单独查询这个人,而是登录者只能看到自己的信息,我是用登录session进行筛选,比如登录人是张三,那他只能看到自己张三的所的信息,不能看到张三四。系统不止这两个,比如还有王X,王XY,李A,李AB
...全文
1700 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoxiangqing 2018-12-24
  • 打赏
  • 举报
回复
用唯一的信息查好一些,比如:帐号
NONAME999 2018-12-24
  • 打赏
  • 举报
回复
像老外一样 姓 和名字 分开存 匹配的时候拼接查询
loveljy_19901114 2018-12-23
  • 打赏
  • 举报
回复
我觉得还是用账号比较好一点,同名同姓的人多了去了
路人甲和灯 2018-12-23
  • 打赏
  • 举报
回复
你需要一个关键字段去标识每一个人
早起晚睡 2018-12-23
  • 打赏
  • 举报
回复
还是和客户沟通的问题,要有权限的问题
如是我闻2012 2018-12-23
  • 打赏
  • 举报
回复
感谢大家的参与,确实不好筛选,只有按照版主的意思,同名的, 就顾不上了。
  • 打赏
  • 举报
回复
我是哈利波特,今天我骑着扫帚出差了,遇到了隔壁张三,我真想对隔壁张三说句:no zuo no die why you try
  • 打赏
  • 举报
回复
奇葩需求,该,让你不单独弄字段存。

第一步 查出以下数据
业务部张三今天休息。
事业部张三四出差。
事业部张三四次出差。

第二步 AI智能语义分析
业务部 张三 今天 休息。
事业部 张三四 出差。
事业部 张三 四次 出差。
第三步 进行二次过滤
吉普赛的歌 版主 2018-12-22
  • 打赏
  • 举报
回复
引用 17 楼 hero_1013 的回复:
[quote=引用 16 楼 吉普赛的歌 的回复:] [quote=引用 13 楼 hero_1013 的回复:] [quote=引用 5 楼 吉普赛的歌 的回复:]
USE tempdb
GO
IF OBJECT_ID('user_data') IS NOT NULL DROP TABLE user_data
IF OBJECT_ID('tab_name') IS NOT NULL DROP TABLE tab_name
GO
CREATE TABLE user_data(
	userId INT IDENTITY(1,1) PRIMARY KEY,
	userName NVARCHAR(20)	
)
SET NOCOUNT ON 
INSERT INTO user_data(userName) VALUES('张三')
INSERT INTO user_data(userName) VALUES('张三四')
GO
CREATE TABLE tab_name (
	id INT IDENTITY(1,1) PRIMARY KEY,
	info_content NVARCHAR(MAX)
)
INSERT INTO tab_name VALUES ('业务部张三今天信息。')
INSERT INTO tab_name VALUES ('事业部张三四出差')
---- 以上为测试表及测试数据 -----


DECLARE @search NVARCHAR(20)
SET @search=N'张三'

select a.* from tab_name AS a 
	INNER JOIN user_data AS b ON a.info_content LIKE '%'+@search+'%'
	AND b.userName=@search 
WHERE NOT EXISTS(
	SELECT 1 FROM user_data AS c WHERE b.userId!=c.userId AND a.info_content LIKE '%'+c.userName+'%'	
)
/*
id          info_content
----------- --------------------
1           业务部张三今天信息。
 */
如果还要复杂、细致的处理, 不是数据库能胜任, 必须用程序结合其它东西了(ES)。
--------------------------------------------------------------------------------------------- 非常感谢! 需求是这样的,主题贴可能没有表达明白。比如有下面的表数据:
年度	责任者			题名
2008	XX第二中等职业学校	二职2008届毕业生王青霞个人档案
2008	XX第二中等职业学校	二职2008届学生王青霞学籍卡
2012	XX第二小学		教师成长档案(王青萍)
2012	XX第二小学		教师成长档案(王青)
2014	XX第二小学		XX二小立项课题实施记载本[王青萍]
2014	XX第二小学		XX二小2014学年203班主任手册[王青]
2014	王青霞			二职干部履历表
2014	王青			XX二小干部履历表
如果登录用户为“王青”,但是她只能看到字段“责任者”和“题名”里自己的信息。 [/quote] 责任者不是一个外键吗? 没有对应一个真正的表吗?[/quote] 是的什么都没有,就一张独立的档案信息表,是客户提供的,包括数据也是他们导入的,也不能修改表结构。所以也不能和用户表建立关联,用户表是我们建的。[/quote] 又要马儿跑, 又要马儿不吃草, 哪有那么好的事? 这个其实不是技术问题, 只是一个沟通问题, 一个业务问题。 涉及到权限, 就不应该用模糊匹配, 权限不应该是模糊的, 而是相当明确的一个东西。 上面责任者, 其实应该对应一个用户id, 责任人关联用户表才得到。 实在不行, 那就 select * from tablename where 责任人=@登录者姓名 得了。 不过同名的, 就顾不上了。
梅龍 2018-12-22
  • 打赏
  • 举报
回复
66666666666666666666666
早起晚睡 2018-12-22
  • 打赏
  • 举报
回复
确定的查询为什么用like ,like就是为了把符合条件的都查出来 。
  • 打赏
  • 举报
回复
不能修改原表结构,就把数据导出来,重新生成一个呗,随便改
weixin_44221802 2018-12-22
  • 打赏
  • 举报
回复
不能修改表结构
如是我闻2012 2018-12-22
  • 打赏
  • 举报
回复
引用 3 楼 二月十六 的回复:
这个没法弄吧,info_content 里边的内容甚至不是名字的也可能读取出来,比如楼主的例子
业务部张三今天信息。
事业部张三四出差。

如果有人叫张三今、张三四 这种的就没法精确的读取出张三的了。

建议修改表结构,把名字单独存储


不能修改表结构,是客户提供的独立的表,包括数据也是他们自己导入。所以我反馈给他们说也不不能实现。如果要做,也只能模糊检索,与关键字相同的数据都会筛选出来。
如是我闻2012 2018-12-22
  • 打赏
  • 举报
回复
引用 16 楼 吉普赛的歌 的回复:
[quote=引用 13 楼 hero_1013 的回复:]
[quote=引用 5 楼 吉普赛的歌 的回复:]
USE tempdb
GO
IF OBJECT_ID('user_data') IS NOT NULL DROP TABLE user_data
IF OBJECT_ID('tab_name') IS NOT NULL DROP TABLE tab_name
GO
CREATE TABLE user_data(
userId INT IDENTITY(1,1) PRIMARY KEY,
userName NVARCHAR(20)
)
SET NOCOUNT ON
INSERT INTO user_data(userName) VALUES('张三')
INSERT INTO user_data(userName) VALUES('张三四')
GO
CREATE TABLE tab_name (
id INT IDENTITY(1,1) PRIMARY KEY,
info_content NVARCHAR(MAX)
)
INSERT INTO tab_name VALUES ('业务部张三今天信息。')
INSERT INTO tab_name VALUES ('事业部张三四出差')
---- 以上为测试表及测试数据 -----


DECLARE @search NVARCHAR(20)
SET @search=N'张三'

select a.* from tab_name AS a
INNER JOIN user_data AS b ON a.info_content LIKE '%'+@search+'%'
AND b.userName=@search
WHERE NOT EXISTS(
SELECT 1 FROM user_data AS c WHERE b.userId!=c.userId AND a.info_content LIKE '%'+c.userName+'%'
)
/*
id info_content
----------- --------------------
1 业务部张三今天信息。
*/


如果还要复杂、细致的处理, 不是数据库能胜任, 必须用程序结合其它东西了(ES)。



---------------------------------------------------------------------------------------------
非常感谢!
需求是这样的,主题贴可能没有表达明白。比如有下面的表数据:
年度	责任者			题名
2008 XX第二中等职业学校 二职2008届毕业生王青霞个人档案
2008 XX第二中等职业学校 二职2008届学生王青霞学籍卡
2012 XX第二小学 教师成长档案(王青萍)
2012 XX第二小学 教师成长档案(王青)
2014 XX第二小学 XX二小立项课题实施记载本[王青萍]
2014 XX第二小学 XX二小2014学年203班主任手册[王青]
2014 王青霞 二职干部履历表
2014 王青 XX二小干部履历表


如果登录用户为“王青”,但是她只能看到字段“责任者”和“题名”里自己的信息。
[/quote]

责任者不是一个外键吗?
没有对应一个真正的表吗?[/quote]

是的什么都没有,就一张独立的档案信息表,是客户提供的,包括数据也是他们导入的,也不能修改表结构。所以也不能和用户表建立关联,用户表是我们建的。
吉普赛的歌 版主 2018-12-22
  • 打赏
  • 举报
回复
引用 13 楼 hero_1013 的回复:
[quote=引用 5 楼 吉普赛的歌 的回复:]
USE tempdb
GO
IF OBJECT_ID('user_data') IS NOT NULL DROP TABLE user_data
IF OBJECT_ID('tab_name') IS NOT NULL DROP TABLE tab_name
GO
CREATE TABLE user_data(
	userId INT IDENTITY(1,1) PRIMARY KEY,
	userName NVARCHAR(20)	
)
SET NOCOUNT ON 
INSERT INTO user_data(userName) VALUES('张三')
INSERT INTO user_data(userName) VALUES('张三四')
GO
CREATE TABLE tab_name (
	id INT IDENTITY(1,1) PRIMARY KEY,
	info_content NVARCHAR(MAX)
)
INSERT INTO tab_name VALUES ('业务部张三今天信息。')
INSERT INTO tab_name VALUES ('事业部张三四出差')
---- 以上为测试表及测试数据 -----


DECLARE @search NVARCHAR(20)
SET @search=N'张三'

select a.* from tab_name AS a 
	INNER JOIN user_data AS b ON a.info_content LIKE '%'+@search+'%'
	AND b.userName=@search 
WHERE NOT EXISTS(
	SELECT 1 FROM user_data AS c WHERE b.userId!=c.userId AND a.info_content LIKE '%'+c.userName+'%'	
)
/*
id          info_content
----------- --------------------
1           业务部张三今天信息。
 */
如果还要复杂、细致的处理, 不是数据库能胜任, 必须用程序结合其它东西了(ES)。
--------------------------------------------------------------------------------------------- 非常感谢! 需求是这样的,主题贴可能没有表达明白。比如有下面的表数据:
年度	责任者			题名
2008	XX第二中等职业学校	二职2008届毕业生王青霞个人档案
2008	XX第二中等职业学校	二职2008届学生王青霞学籍卡
2012	XX第二小学		教师成长档案(王青萍)
2012	XX第二小学		教师成长档案(王青)
2014	XX第二小学		XX二小立项课题实施记载本[王青萍]
2014	XX第二小学		XX二小2014学年203班主任手册[王青]
2014	王青霞			二职干部履历表
2014	王青			XX二小干部履历表
如果登录用户为“王青”,但是她只能看到字段“责任者”和“题名”里自己的信息。 [/quote] 责任者不是一个外键吗? 没有对应一个真正的表吗?
沅虹 2018-12-22
  • 打赏
  • 举报
回复
你这个问题只能求助于表结构,比如说有两个张三你怎么办?一百个呢?
如是我闻2012 2018-12-22
  • 打赏
  • 举报
回复
引用 3 楼 二月十六 的回复:
这个没法弄吧,info_content 里边的内容甚至不是名字的也可能读取出来,比如楼主的例子
业务部张三今天信息。
事业部张三四出差。

如果有人叫张三今、张三四 这种的就没法精确的读取出张三的了。

建议修改表结构,把名字单独存储


表结构不能修改了,是客户提供的,他们是标准的档案库
如是我闻2012 2018-12-22
  • 打赏
  • 举报
回复
引用 5 楼 吉普赛的歌 的回复:
USE tempdb
GO
IF OBJECT_ID('user_data') IS NOT NULL DROP TABLE user_data
IF OBJECT_ID('tab_name') IS NOT NULL DROP TABLE tab_name
GO
CREATE TABLE user_data(
userId INT IDENTITY(1,1) PRIMARY KEY,
userName NVARCHAR(20)
)
SET NOCOUNT ON
INSERT INTO user_data(userName) VALUES('张三')
INSERT INTO user_data(userName) VALUES('张三四')
GO
CREATE TABLE tab_name (
id INT IDENTITY(1,1) PRIMARY KEY,
info_content NVARCHAR(MAX)
)
INSERT INTO tab_name VALUES ('业务部张三今天信息。')
INSERT INTO tab_name VALUES ('事业部张三四出差')
---- 以上为测试表及测试数据 -----


DECLARE @search NVARCHAR(20)
SET @search=N'张三'

select a.* from tab_name AS a
INNER JOIN user_data AS b ON a.info_content LIKE '%'+@search+'%'
AND b.userName=@search
WHERE NOT EXISTS(
SELECT 1 FROM user_data AS c WHERE b.userId!=c.userId AND a.info_content LIKE '%'+c.userName+'%'
)
/*
id info_content
----------- --------------------
1 业务部张三今天信息。
*/


如果还要复杂、细致的处理, 不是数据库能胜任, 必须用程序结合其它东西了(ES)。



---------------------------------------------------------------------------------------------
非常感谢!
需求是这样的,主题贴可能没有表达明白。比如有下面的表数据:
年度	责任者			题名
2008 XX第二中等职业学校 二职2008届毕业生王青霞个人档案
2008 XX第二中等职业学校 二职2008届学生王青霞学籍卡
2012 XX第二小学 教师成长档案(王青萍)
2012 XX第二小学 教师成长档案(王青)
2014 XX第二小学 XX二小立项课题实施记载本[王青萍]
2014 XX第二小学 XX二小2014学年203班主任手册[王青]
2014 王青霞 二职干部履历表
2014 王青 XX二小干部履历表


如果登录用户为“王青”,但是她只能看到字段“责任者”和“题名”里自己的信息。
如是我闻2012 2018-12-22
  • 打赏
  • 举报
回复
引用 8 楼 早起晚睡 的回复:
确定的查询为什么用like ,like就是为了把符合条件的都查出来 。


比如下边的表数据:
年度	责任者			题名
2008 XX第二中等职业学校 二职2008届毕业生王青霞个人档案
2008 XX第二中等职业学校 二职2008届学生王青霞学籍卡
2012 XX第二小学 教师成长档案(王青萍)
2012 XX第二小学 教师成长档案(王青)
2014 XX第二小学 XX二小立项课题实施记载本[王青萍]
2014 XX第二小学 XX二小2014学年203班主任手册[王青]
2014 王青霞 二职干部履历表
2014 王青 XX二小干部履历表

登录用户为“王青”,但是她只能看到字段“责任者”和“题名”里自己的信息。
加载更多回复(6)

34,593

社区成员

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

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