比赛从一个表中的字符集为其他表的记录
问题描述:
我有两个表(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
这些记录(或更多)来自tblInvalidCharactersList
表格的Character
列的字符。
我想:
SELECT
[RecRef],
[Name]
FROM [tblMonthsRecords]
WHERE [Name] IN (SELECT Character FROM [tblInvalidCharactersList])
和它在所有不返回任何结果。
我甚至试过NOT IN
子句,正如你猜测的那样,返回所有记录。
为什么我不对LIKE
子句中的字符列表进行硬编码是因为我希望列表动态更新。
您可以将tblInvalidCharactersList
视为字符“黑名单”。
答
我的另一种方式将使用exists
:
select mr.*
from tblMonthsRecords mr
where exists (select 1
from tblInvalidCharactersList icl
where charindex(icl.Character, mr.name) > 0
);
你似乎不关心实际的无效字符。
答
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
难道你[像](https://docs.microsoft.com/en-us/sql/t-sql/language-elements/like-transact-sql)吗? –