我有两个表(T-SQL):
tblInvalidCharactersList tblMonthsRecords
+-----------+-----------+ +--------+-------------+
| CodePoint | Character | | RecRef | Name |
+-----------+-----------+ +--------+-------------+
| 38 | & | | 21 | Firs> name |
+-----------+-----------+ +--------+-------------+
| 64 | @ | | 89 | @Second name|
+-----------+-----------+ +--------+-------------+
| 62 | > | | 321 | Third n«me |
+-----------+-----------+ +--------+-------------+
| 171 | « | | 381 | Fourth name |
+-----------+-----------+ +--------+-------------+
我想找到tblMonthsRecords
中Character
表的tblInvalidCharactersList
列中至少有一个(或多个)字符的记录。
我试过了:
SELECT
[RecRef],
[Name]
FROM [tblMonthsRecords]
WHERE [Name] IN (SELECT Character FROM [tblInvalidCharactersList])
并且根本不会返回任何结果。
我甚至尝试了NOT IN
子句,正如您猜测的那样,返回所有记录。
我没有在LIKE
子句中对字符列表进行硬编码的原因是因为我希望动态更新列表。
您可以将tblInvalidCharactersList
视为字符“黑名单”。
答案 0 :(得分:1)
IN
会在Name
列中查找完全匹配字符,但不会搜索Name
列中的字符
使用LIKE
运算符
select Distinct a.*
from tblMonthsRecords a
join tblInvalidCharactersList b
on a.Name like '%' + b.Character + '%'
使用charindex
charindex(b.Character,a.Name) > 0
答案 1 :(得分:1)
我会使用exists
:
select mr.*
from tblMonthsRecords mr
where exists (select 1
from tblInvalidCharactersList icl
where charindex(icl.Character, mr.name) > 0
);
你似乎并不关心实际的无效角色。