T-SQL выбирает записи, где поле содержит определенное ключевое слово из другой таблицы - PullRequest
0 голосов
/ 11 июня 2019

Я пытаюсь запустить приведенный ниже SQL для возврата записей, где «a.PatientCommentText» содержит «плохое ключевое слово», как указано «b.Keyword» ниже. Я не думаю, что это возвращает все, потому что приведенный ниже запрос возвращает только 253 записи, и обратное этому (где charindex (b.Keyword, a.PatientCommentText) = 0 возвращает 7 378 записей, но общее количество PES_Data составляет 9 821. I будет ожидать, что сумма двух сценариев будет равна количеству записей 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 ]

4 голосов
/ 11 июня 2019

Возможно, у вас есть PatientCommentText значения, которые NULL.

Попробуйте добавить это к своим результатам:

select pd.*
from PES_Data pd
where pd.PatientCommentText is null;

Кроме того, вы можете получать дубликаты,для комментариев, которые содержат более одного "плохого слова".Я не ожидал, что цифры сложатся, если вы не знаете, что нет дубликатов.

0 голосов
/ 12 июня 2019

+ 1 к ответу Гордона Линоффа.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...