mr_*_*air 5 sql sql-server sql-server-2008
USE tempdb
CREATE TABLE A
(
id INT,
a_desc VARCHAR(100)
)
INSERT INTO A
VALUES (1, 'vish'),(2,'hp'),(3,'IBM'),(4,'google')
SELECT * FROM A
CREATE TABLE B
(
id INT,
b_desc VARCHAR(100)
)
INSERT INTO B
VALUES (1, 'IBM[SR4040][SR3939]'),(2,'hp[GR3939]')
SELECT * FROM B
SELECT *
FROM A
WHERE a_desc LIKE (SELECT b_desc FROM B) -- IN with LIKE problem here
Run Code Online (Sandbox Code Playgroud)
在表B中结束字符串不一样,所以我不能使用trim方法删除某些字符并在In子句中匹配.
- 上面抛出错误子查询返回的值超过1
- 我在两个表中都有一千行只是为了示例目的我已经创建了这个例子
--excepted output
--IBM
--hp
Run Code Online (Sandbox Code Playgroud)
- 从一张桌子
试试这个 -
查询:
SELECT *
FROM A
WHERE EXISTS(
SELECT 1
FROM B
WHERE b_desc LIKE '%' + a_desc + '%'
)
Run Code Online (Sandbox Code Playgroud)
输出:
id a_desc
----------- ----------
2 hp
3 IBM
Run Code Online (Sandbox Code Playgroud)
执行计划:

扩展统计:

更新:
SELECT A.*, B.*
FROM A
OUTER APPLY (
SELECT *
FROM B
WHERE b_desc LIKE '%' + a_desc + '%'
) B
WHERE b_desc IS NOT NULL
Run Code Online (Sandbox Code Playgroud)