我有2张桌子:
CREATE TABLE TabSTR
(
ID INT,
SBSTR VARCHAR(1000)
)
CREATE TABLE TabSubSTR
(
ID INT,
SubSBSTR VARCHAR(100)
)
我需要从第一张表TabSTR中获取所有行,其中第一列SubSBSTR在SBSTR中存在。
SELECT * FROM TabSTR A
WHERE EXISTS (SELECT 1 FROM TabSubSTR B WHERE A.SBSTR LIKE '%' + B.SubSBSTR + '%')
测试数据:
第一张桌子:
INSERT INTO TabSTR VALUES (1, 'This is first row')
INSERT INTO TabSTR VALUES (2, 'This is second row')
INSERT INTO TabSTR VALUES (3, 'Third row is here')
INSERT INTO TabSTR VALUES (4, 'Another third row')
INSERT INTO TabSTR VALUES (5, 'Hello word')
INSERT INTO TabSTR VALUES (6, 'Hello')
第二张桌子:
INSERT INTO TabSubSTR VALUES (1, '1st')
INSERT INTO TabSubSTR VALUES (2, 'second')
INSERT INTO TabSubSTR VALUES (3, 'third')
INSERT INTO TabSubSTR VALUES (4, 'four')
INSERT INTO TabSubSTR VALUES (5, '5th')
INSERT INTO TabSubSTR VALUES (6, '6th')
INSERT INTO TabSubSTR VALUES (7, 'ord')
结果数据:
2,'This is second row'
4,'Another third row'
5,'Hello word'
问题-当有数千行要匹配时,LIKE运算符非常慢 我在这里也尝试了全文搜索,但是当TabSubSTR行数达到〜200k时,它也非常慢
也许smb还有其他想法吗? 预先谢谢你