2014-02-11 3 views
0

У меня возникла проблема с SQL-сервером для получения поля значений путем сопоставления двух полей из другой таблицы. вот мое описание:Как сопоставить значения двух полей из двух разных таблиц, чтобы вернуть другое значение, связанное с одним

Таблица A содержит

ProductID ProductName 

01   Health insurance1 
02   Health insurance2 
03   Health insurance3 
o4   Car Insurance1 
o5   Car Insurance2 
06   Property Insurance1 
07   Property Insurance2 

Таблица B содержит только

ProductName 

Health Insurance1 Yr 10- 11 
TTK Health Insurance Yr 2 
Health Insurance3 Yr 5-6 
Car Insurance1 Yr 3 
Car Insurance Yr 4 
Car Insurance3 Yr 4-5 
Property Insurance Yr 1 
Property Insurance3 Yr 5 

То, что я хочу, чтобы запрос, чтобы вернуть это ProductID из таблицы А появился и выровнены точно с именем productName в таблице B, как и в таблице A. Обратите внимание, что значения из обоих полей productName не совсем одинаковы, но выглядят очень похожими.

Ниже приведен сценарий, который я пытался использовать LIKE-оператором, но он вернул мне избыточный идентификатор продукта, так как кажется, что оператор LIKE ничего не обрабатывает после «страхования».

select distinct 
     a.productID, b.productname 
from 
     tableA a, 
     tableB b 
where 
     b.productname like '%' + a.productname+ '%' 
     or a.productname like '%' + b.productname+ '%' 
order by a.prodID 

Пожалуйста, помогите мне решить эту проблему. Заранее спасибо!!

+0

Таким образом, единственная связь между таблицами A и B заключается в том, что ProductName аналогичен? – Ghost

ответ

0

Попробуйте этот код

SELECT distinct 
     a.productID, b.productname 
FROM tableA a 
     INNER JOIN tableB b 
      ON b.productname LIKE '%' + a.productname+ '%' 
ORDER BY a.prodID 

Надеется, что это помогает!

+0

Спасибо, Джейд. Я попробую этот код и посмотрю, работает ли он. – user3295296

+0

Эй, Джейд, код, который вы предоставили, все еще не возвратил мне значения, которые я хотел. Те же идентификаторы продуктов дублируются независимо от разницы между именами продуктов. Например, только ProductID 01 (таблица A) будет присвоен всем продуктам, которые содержат «Медицинское страхование» (таблица B), независимо от оставшегося содержимого, такого как «YR 1-2»; и ID 02 и 03 (таблица A) никогда не будут назначаться для любых продуктов с содержанием, содержащим «Медицинское страхование» (таблица B). – user3295296

+0

Можете ли вы опубликовать, какой результат вы ожидали от базы на вашем примере выше, чтобы сделать ее более ясной. – Jade

Смежные вопросы