5
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

表 B 中的结尾字符串始终不相同,因此我不能使用修剪方法删除某些字符并在 In 子句中匹配。

-- 上面抛出错误的子查询返回超过 1 个值

- 我在两个表中都有一千行只是为了举例我创建了这个例子

--excepted output 
--IBM
--hp 

--来自A表

4

4 回答 4

5

试试这个——

询问:

SELECT * 
FROM A
WHERE EXISTS(
    SELECT 1
    FROM B
    WHERE b_desc LIKE '%' + a_desc + '%'
)

输出:

id          a_desc
----------- ----------
2           hp
3           IBM

执行计划:

教授

扩展统计:

统计

更新:

SELECT A.*, B.* 
FROM A
OUTER APPLY (
     SELECT * 
     FROM B
     WHERE b_desc LIKE '%' + a_desc + '%' 
) B
WHERE b_desc IS NOT NULL
于 2013-07-05T05:35:27.530 回答
3

你可以简单地加入:

SELECT distinct a.* 
from A inner join b on b.b_desc like '%' + a.a_desc + '%' 
于 2013-07-05T05:38:56.283 回答
3

试试这个,这会给你准确的输出

select distinct a.a_desc 
from A r 
join B b
on b.b_desc like  a.a_desc +'%'
于 2013-07-05T05:42:11.093 回答
1
SELECT * 
FROM A , B
WHERE a_desc LIKE '%' + b_desc + '%' 
于 2013-07-05T05:49:10.893 回答