2013-07-05 62 views
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 

tất cả thời gian chuỗi kết thúc không giống nhau trong bảng B vì vậy tôi không thể sử dụng cách tiếp cận cắt để xóa ký tự nhất định và khớp với trong mệnh đề In.Sử dụng [như] như trong mệnh đề trong SQL?

- trên ném subquery lỗi trở lại hơn 1 giá trị

- Tôi đã ngàn hàng trong cả hai bảng chỉ cho mục đích ví dụ tôi đã tạo ra ví dụ này

--excepted output 
--IBM 
--hp 

--from Một bảng

+1

Có đã là một vài câu hỏi như vậy: http://stackoverflow.com/questions/15735117/using-like-and-in-and-a-subquery-in-a-single-sql-statement - http: // stackoverflow. com/questions/10618912/like-using-subquery-return-multiple-rows - http://stackoverflow.com/questions/2528858/with-sql-can-you-use-a-sub-query-in-a- where-like-clause –

Trả lời

5

Hãy thử này -

Query:

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

Output:

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

kế hoạch Thực hiện:

proff

Extended thống kê:

stat

Cập nhật:

SELECT A.*, B.* 
FROM A 
OUTER APPLY (
    SELECT * 
    FROM B 
    WHERE b_desc LIKE '%' + a_desc + '%' 
) B 
WHERE b_desc IS NOT NULL 
+1

Để có kế hoạch thực hiện sự hiểu biết tốt nhất, hãy đọc hướng dẫn ngắn này: http://sqlmag.com/t-sql/understanding-query-plans – Devart

+0

Có thể lấy cột từ bảng B trong danh sách chọn với A không? –

+1

Vui lòng xem câu trả lời được cập nhật. – Devart

3

bạn có thể đơn giản tham gia:

SELECT distinct a.* 
from A inner join b on b.b_desc like '%' + a.a_desc + '%' 
3

Hãy thử điều này, điều này sẽ cung cấp cho bạn chính xác sản lượng

select distinct a.a_desc 
from A r 
join B b 
on b.b_desc like a.a_desc +'%' 
1
SELECT * 
FROM A , B 
WHERE a_desc LIKE '%' + b_desc + '%'