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中,结束字符串总是不同的,所以我不能使用trim方法来删除某些字符并在in子句中进行匹配。
--上述抛出错误子查询返回1个以上的值
--我在两个表中都有1000行,只是为了举例,我创建了这个示例
--excepted output
--IBM
--hp --来自表格
发布于 2013-07-05 13:35:28
试试这个-
查询:
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-05 13:38:56
你可以简单的加入:
SELECT distinct a.*
from A inner join b on b.b_desc like '%' + a.a_desc + '%' 发布于 2013-07-05 13:42:11
试试这个,它会给你准确的输出。
select distinct a.a_desc
from A r
join B b
on b.b_desc like a.a_desc +'%'https://stackoverflow.com/questions/17481705
复制相似问题