我有两个表:t1
和t2
。分为三个步骤:
- 在
t1
select aset_of_strings
with id = 1 ("1a" and"3c")。 - 从中
t1
选择对应于OPTIONID ='A'
并包含子字符串的字符串set_of_strings
。
t1
身份名称 1个“1a” 2“2b” 1 "3c"
t2
选项ID TXT 一个“7h 9t” B“1a 8n” 一个“2b 4r” 一个“3c 6u”
查询
SELECT
NAME
FROM t1
WHERE ID = 1; -- 1a, 3c
SELECT
TXT
FROM t2
WHERE OPTIONID = 'A' AND (TXT LIKE '%1a%' OR TXT LIKE '%3c%') --"3c 6u"
问题
如何使TXT LIKE '%1a%' OR TXT LIKE '%3c%'
零件自动化?
LIKE'%1a%'
是安全的,因为所有条目都具有相同的格式,即没有1a2
inTXT
列。
就像是:
添加
ID = 1
留给读者作为练习。我假设你只是做了一个例子。如果不是,则应避免使用
CHAR
列名等保留字。在字段的两边都使用通配符通常被认为是可优化性不好的做法。在这种情况下可能无关紧要,但如果该字段上有索引,它将无法使用并可能导致一些性能问题。
SELECT DISTINCT
用于涵盖“1a”和“3c”都匹配同一行的情况(否则会导致该行返回两次)可能很有用。下面是适用于 Microsoft SQL Server 的解决方案。您可能希望在 t2.TXT 列上有一个聚集索引。还可以在条件下使用以下两种方法进行测试
ON
。t2.TXT LIKE '%' + t1.NAME OR t2.TXT LIKE t1.NAME + '%'
t2.TXT LIKE '%' + t1.NAME + '%'
我想第一个在性能方面会更好。