2015-08-07 3 views
2

Попытка выполнить частичное совпадение строк здесь, но у меня проблема с оператором LIKE. Я уверен, что его синтаксис, но я не могу видеть егоЧастичное совпадение строк SQL - Inner Join

SELECT Name 
FROM Table1 a 
INNER JOIN Table2 b ON a.Name = b.FullName LIKE '%' + a.Name + '%' 

Я получаю сообщение об ошибке, когда я исполняю этот

Msg 156, Level 15, State 1, Line 4
Неправильный синтаксис около ключевое слово «LIKE».

+1

что именно ваше состояние? вы хотите проверить 'b.FullName LIKE '%' + a.Name + '%'' –

+0

, чего вы пытаетесь достичь? покажите нам несколько примеров ввода и вывода. – DarkKnight

+0

У меня есть данные в таблице 1 и таблице 2. Таблица 1 для бывших имеет Петра, а в таблице 2 есть Петр Любовь. Обе таблицы имеют более 50 штук. Я хочу сопоставить оба и дать мне результат, когда он будет соответствовать. Мне нужно совместить его частично, так как если я не использую оператор LIKE, я получаю нулевые результаты –

ответ

4

Попробуйте

SELECT distinct Name, FullName 
FROM Table1 a 
INNER JOIN Table2 b ON (b.FullName LIKE '%' + a.Name + '%' OR a.Name like '%'+b.FullName+'%') 
+0

он не дал мне ошибку, но не дал мне результатов. На этот раз он подобрал слово и дал мне 10 результатов, когда есть только 1 матч –

+0

работал как шарм, теперь, если у меня более одного матча, скажем, 3 матча, могу ли я отобразить их все? –

+0

Если я правильно понял ваш вопрос, выше запрос должен сделать это тоже – DarkKnight

0

Try,

SELECT Name 
FROM Table1 a 
INNER JOIN Table2 b ON b.FullName LIKE '%' + a.Name + '%' 
+0

Ошибка синтаксиса в коде. Пожалуйста, исправьте это. –

0

Вы имеете в виду это то, что вы хотите

DECLARE @Tablle1 TABLE(id int identity(1,1),Name varchar(20)) 
DECLARE @Tablle2 TABLE(id int identity(1,1),FullName varchar(20)) 

INSERT INTO @Tablle1 
(
    Name 
) 
VALUES 
(
    'Bob' 
), 
('Sam'); 

INSERT INTO @Tablle2 
(
    FullName 
) 
VALUES 
(
    'Bob M' 
), 
('Gary'); 

SELECT b.FullName 
    FROM @Tablle1 a 
    INNER JOIN @Tablle2 b 
    ON b.FullName like '%' + a.Name + '%' 

и выход

FullName 
Bob M 
+0

У меня уже есть таблицы и не нужно создавать их снова. Можете ли вы написать код без создания таблиц –

+0

Это переменные таблицы, чтобы показать вам пример ваших данных и вывести из них данные – Mahajan344

0

Вам нужно сравнить FullName с именем, используя LIKE, но уже вы соответствуете столбцам, чтобы проверить, равны ли они. Там нет никакой логики.

Если вам просто нужно назвать эту схему совпадения, как a.name вы можете выбрать для следующего запроса:

SELECT  a.Name, b.FullName 
FROM   [1table] AS a INNER JOIN 
         [2table] AS b ON a.Name = b.FullName 
WHERE  (b.FullName LIKE N'%a.Name%') 
+0

не дал никаких результатов, поскольку, когда вы их сопоставляете, вы делаете полный матч а затем показывая результаты «where statement» Я думаю, что это то, что делает логика, если я не ошибаюсь и поэтому не показывает никаких результатов –