Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 выделить записи полей таблицы 1, содержащие(contains, like) значения полей таблицы 2  [new]
ivan.555-19
Member

Откуда:
Сообщений: 11
не совсем вижу, как подобное было бы можно сделать..
таблица 1 - tab1, таблица - tab2
хотелось бы чтобы в итоге остались строки(1, 3, 5) первой таблицы

create table tab1 (x char(20), y int);
insert into tab1 values ('На дворе трава, на траве дрова', 1);
insert into tab1 values ('Не руби дрова на траве двора.', 2);
insert into tab1 values ('На дворе трава', 3);
insert into tab1 values ('дрова на траве ', 4);
insert into tab1 values ('трава, на траве дрова', 5);

create table tab2 (x char(20));
insert into tab2 values ('трава');
insert into tab2 values ('аве дро');

select * from tab1;
select * from tab2;
3 июн 19, 14:35    [21900542]     Ответить | Цитировать Сообщить модератору
 Re: выделить записи полей таблицы 1, содержащие(contains, like) значения полей таблицы 2  [new]
court
Member

Откуда:
Сообщений: 1985
select distinct t1.x, t1.y 
from tab1 t1 inner join tab2 t2 on rtrim(t1.x) like '%'+rtrim(t2.x)+'%' 
3 июн 19, 14:59    [21900572]     Ответить | Цитировать Сообщить модератору
 Re: выделить записи полей таблицы 1, содержащие(contains, like) значения полей таблицы 2  [new]
ivan.555-19
Member

Откуда:
Сообщений: 11
court,

спасибо!
3 июн 19, 15:03    [21900577]     Ответить | Цитировать Сообщить модератору
 Re: выделить записи полей таблицы 1, содержащие(contains, like) значения полей таблицы 2  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
SELECT *
FROM t1
WHERE EXISTS(SELECT * FROM t2 WHERE t1.x LIKE '%'+t2.x+'%');
3 июн 19, 16:13    [21900670]     Ответить | Цитировать Сообщить модератору
 Re: выделить записи полей таблицы 1, содержащие(contains, like) значения полей таблицы 2  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
iap
SELECT *
FROM t1
WHERE EXISTS(SELECT * FROM t2 WHERE t1.x LIKE '%'+t2.x+'%');
Правда, t2.x, наверно, может содержать '%' или '_' или '[' или ']'?
Тогда надёжнее
SELECT *
FROM t1
WHERE EXISTS(SELECT * FROM t2 WHERE CHARINDEX(t2.x,t1.x)<>0);
3 июн 19, 16:18    [21900678]     Ответить | Цитировать Сообщить модератору
 Re: выделить записи полей таблицы 1, содержащие(contains, like) значения полей таблицы 2  [new]
ivan.555-19
Member

Откуда:
Сообщений: 11
iap,

спасибо большое за варианты!
3 июн 19, 16:56    [21900718]     Ответить | Цитировать Сообщить модератору
 Re: выделить записи полей таблицы 1, содержащие(contains, like) значения полей таблицы 2  [new]
fkthat
Member

Откуда:
Сообщений: 2636
Запросы с like, обычно, плохая идея, если это не поиск по началу строки. Если нужен поиск по словам в строке, то стоит подумать о full-text search.
3 июн 19, 18:52    [21900823]     Ответить | Цитировать Сообщить модератору
 Re: выделить записи полей таблицы 1, содержащие(contains, like) значения полей таблицы 2  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
fkthat
Запросы с like, обычно, плохая идея, если это не поиск по началу строки. Если нужен поиск по словам в строке, то стоит подумать о full-text search.
Tckb
ivan.555-19
insert into tab2 values ('аве дро');
, то это разве "по словам"?
3 июн 19, 19:00    [21900837]     Ответить | Цитировать Сообщить модератору
 Re: выделить записи полей таблицы 1, содержащие(contains, like) значения полей таблицы 2  [new]
ivan.555-19
Member

Откуда:
Сообщений: 11
iap
ivan.555-19
insert into tab2 values ('аве дро');
, то это разве "по словам"?


такое хреновое слово))
у меня вообще sas стоит.. сделал через INDEX - это местный аналог CHARINDEX похоже.. работает не то чтобы быстро.. но результат дает - уже хорошо.
3 июн 19, 19:33    [21900864]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить