2009-11-09 3 views
0

Мне нужно написать то, что я хотел бы назвать долинкой Girl-query. Мне нужно SELECT то вот LIKE IN - что-то вроде этого:Можете ли вы ВЫБРАТЬ ГДЕ что-то НРАВИТСЯ И ВХОДА в одно и то же время?

SELECT * FROM Table1 WHERE Name LIKE IN (SELECT Name FROM Table2)

Причиной этого является у меня есть таблица полные названия компаний, но они не совсем то же самое - f.ex. в Таблице 1 это может сказать «Chrysler Group», в то время как в Таблице 2 это может просто сказать «Chrysler».

Есть ли простой способ сделать это?

ответ

2
select 
    * 
from 
    Table1 t1 
    inner join Table2 t2 on (t1.name like t2.name + '%') 

или без знака '%', если вы хотите :)

+0

Это один запрос ssslllooowww! НО это ответ на мой вопрос. К сожалению, полученные данные были недостаточно хороши для того, для чего мне это нужно, но это не моя проблема. ;) –

+0

Вы должны использовать таблицу компаний и использовать свои идентификаторы в своих других таблицах. С ним будет более комфортно работать с ним и отличным ускорением. – silent

+0

Таблица 2 фактически является временной таблицей для этого одноразового экспортного запуска, который я собирался сделать, таким образом, это не очень эффективный подход. –

0

Я думаю:

SELECT * FROM table1 WHERE EXISTS (SELECT Name FROM Table2 WHERE Table1.Name LIKE Name) 
+0

Вы должны просмотреть план выполнения своего предложения. – silent

+0

? Если вы собираетесь сделать такой комментарий, вы должны объяснить * почему * - я вполне согласен учиться (почему ответ префикс «Я думаю») и вполне готов удалить ответ, если его неправильный ответ или отредактировать/аннотировать, если необходимо, но немного больше помощи в этом направлении сначала желательно – Murph

+0

Немного устарело, но мне скучно: проблема с вашим запросом заключается в том, что WHERE EXISTS будет вызываться один раз в строке в таблице1. Поскольку WHERE EXISTS также использует оператор LIKE, производительность, скорее всего, будет очень низкой. Учитывая исходный запрос, я думаю, что любой запрос будет выполняться медленно, так что не принимайте это близко к сердцу :) – Meff

1

Вот один из способов вы можете сделать это:

SELECT t1.* 
FROM Table1 t1 
    JOIN Table2 t2 ON t1.Name LIKE t2.Name + '%' 
0

Если вы пытаясь создать список близких совпадений, функция SOUNDEX может быть полезна, когда может возникнуть сомнительное правописание.

SELECT T1.* 
    FROM Table1 T1  
    JOIN Table2 T2 ON SOUNDEX(T1.Name) = SOUNDEX(T2.Name)