在SQL中使用[like] like in子句?

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)

- 从一张桌子

Dev*_*art 5

试试这个 -

查询:

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)

执行计划:

PROFF

扩展统计:

统计

更新:

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)