2013-07-05 18 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 

cały czas ciąg końcowy nie jest taki sam w tabeli B, więc nie mogę użyć metody przycinania do usunąć określoną postać i dopasować w klauzuli In.Używanie [jak] jak w klauzuli w SQL?

- powyżej rzuca błędu podzapytaniu zwrócone więcej niż 1 wartość

- Mam tysiąc wierszy w obu tabelach tylko na przykład celów Utworzyłem ten przykład

--excepted output 
--IBM 
--hp 

--from stół

+1

Nie jest już kilka takich pytań: 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- gdzie-jak-klauzula –

Odpowiedz

5

Spróbuj jeden -

Zapytanie:

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

wyjściowa:

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

Plan Wykonanie:

proff

Rozbudowane statystyki:

stat

Aktualizacja:

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

Aby lepiej zrozumieć plan wykonania przeczytaj tę krótką instrukcję: http://sqlmag.com/t-sql/understanding-query-plans – Devart

+0

Czy można pobrać kolumnę z tabeli B na liście wyboru za pomocą A? –

+1

Zobacz zaktualizowaną odpowiedź. – Devart

3

można dołączyć prosty:

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

Spróbuj tego, to daje dokładnie wyjście

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 + '%' 
Powiązane problemy