T-SQL选择记录,其中某个字段包含另一个表中的某个关键字

时间:2019-06-11 19:45:56

标签: sql sql-server tsql

我试图运行下面的SQL以返回记录,其中“ a.PatientCommentText”包含一个“不良关键字”,如下面的“ b.Keyword”所示。我不认为这会返回所有内容,因为下面的查询仅返回253条记录,而与此相反(其中charindex(b.Keyword,a.PatientCommentText)= 0返回7,378条记录,但PES_Data的总数为9,821。会希望这两种情况的总和等于PES_Data的记录数。我在做什么错了?

返回253条记录

select a.* from PES_Data a
inner join Bad_Keywords b on 1=1
where charindex(b.Keyword, a.PatientCommentText) <> 0

返回7,378条记录

select a.* from PES_Data a
inner join Bad_Keywords b on 1=1
where charindex(b.Keyword, a.PatientCommentText) = 0

但是下面返回9,821条记录

select a.* from PES_Data a

2 个答案:

答案 0 :(得分:4)

您似乎会有一些PatientCommentText的{​​{1}}值。

尝试将其添加到您的结果中:

NULL

此外,对于包含多个“坏词”的注释,您可能会得到重复。我不希望这些数字加起来,除非您知道没有重复项。

答案 1 :(得分:0)

+1戈登·利诺夫(Gordon Linoff)的答案。

DECLARE @tblA TABLE(Base VARCHAR(100));
DECLARE @tblB TABLE(Reference VARCHAR(100));

-- Total 7 rows
INSERT INTO @tblA VALUES   
('abcdaa')   
,('bcdeab') 
,('cdefbb')   
,('defgbc')  
,('efghcc')
,('fghddd')
,(NULL)

select count(*) from @tblA where CHARINDEX('aa',Base) <> 0        -- Returns 1  
select count(*) from @tblA where CHARINDEX('aa',Base) = 0         -- Returns 5
select count(*) from @tblA where CHARINDEX('aa',Base) IS NULL     -- Returns 1