2012-05-17 2 views
-2

Привет Я использую ниже запрос.sql query получение повторяющихся значений

Create proc [dbo].[usp_getPropertyByWord] 
(@Description nvarchar(200)) 
as 

set @Description=replace(@Description,' ',' ') 
set @Description=replace(@Description,' ',' ') 

create table #temp(name varchar(100)) 
insert into #temp valueS(@Description) 
insert into #temp 
SELECT word FROM dbo.splitStringChars(@Description,' ',',') 
delete #temp where name in('',' ',',') 

create table #temp1(property_id int,property_number nvarchar(15),name nvarchar(500),short_desciption nvarchar(2000),description nvarchar(4000),address1 nvarchar(200),address2 nvarchar(200),city nvarchar(50),locality nvarchar(100),zip nvarchar(8)) 
insert into #temp1(property_id,property_number,name ,short_desciption,description,address1,address2,city,locality,zip) 
SELECT distinct(p.property_id),p.property_number,p.name,p.short_description,p.description,ta.address1,ta.address2, 
tc.city_name,cl.City_Locality_Name,ta.zip 
FROM tbl_property p 
INNER JOIN 
tbl_PropertyAddress ta on ta.property_id=p.property_id 
inner join tbl_City tc on ta.city=tc.city_id 
inner join tbl_City_Locality cl on cl.City_id=tc.city_id 
inner join 
(SELECT distinct(name) FROM #temp) B 
ON ([email protected] or p.name LIKE '%' + B.name + '%' or p.short_description like '%' + B.name + '%' or p.description like '%' + B.name + '%' 
or ta.address1 LIKE '%' + B.name + '%' or ta.address2 LIKE '%' + B.name + '%' or tc.City_Name LIKE '%' + B.name + '%') 
where NOT EXISTS(select t.* from #temp1 t where t.property_id=p.property_id and t.property_number=p.property_number and t.name=p.name and t.short_desciption=p.short_description and t.description=p.description and t.address1=ta.address1 and t.address2=ta.address2 and t.city=tc.City_Name and t.locality=cl.City_Locality_Name and t.zip=ta.zip) 


    delete #temp 
    select * from #temp1 
GO 

Если я дать " 'hyderbad HYD, HGF, hyds'" для @Description я получаю 16000 записей, но у меня есть только 130 записей в моей таблице.

Я получаю значение из функции splitStringChars

hyderbad  
hyd  
hgf  
hyds 

Как это можно решить?

+2

Похоже, что плохой JOIN вызывает отношения «многие ко многим» ... Вы пытались комментировать какую-то сложность, чтобы определить, какое соединение вызывает у вас проблемы? –

+1

use 'distinct' ... – Rahul

+0

Даже использование отдельных элементов может не возвращать только одну строку, если одно из значений столбца из объединений отличается. Следуйте совету Кевина и удалите сложность, пока не найдете, когда перестанете получать кратность. Это поможет вам определить, какая таблица и столбец вызывает несколько записей. – Josh

ответ

0

Знаете ли вы, что TSQL?

Create proc [dbo].[usp_getPropertyByWord] 
(@Description nvarchar(200)) 
as 

set @Description=replace(@Description,' ',' ') 
set @Description=replace(@Description,' ',' ') 

create table #temp(name varchar(100)) 
insert into #temp valueS(@Description) 
insert into #temp 
SELECT word FROM dbo.splitStringChars(@Description,' ',',') 
delete #temp where name in('',' ',',') 


SELECT p.property_id,p.property_number,p.name,p.short_description,p.description 
-- ,ta.address1,ta.address2,tc.city_name,cl.City_Locality_Name,ta.zip 
FROM tbl_property p 
-- INNER JOIN 
--tbl_PropertyAddress ta on ta.property_id=p.property_id 
--inner join tbl_City tc on ta.city=tc.city_id 
--inner join tbl_City_Locality cl on cl.City_id=tc.city_id 
inner join 
(SELECT distinct(name) FROM #temp) B 
ON ([email protected] or p.name LIKE '%' + B.name + '%' or p.short_description like '%' + B.name + '%' or p.description like '%' + B.name + '%' 
-- or ta.address1 LIKE '%' + B.name + '%' or ta.address2 LIKE '%' + B.name + '%' 
-- or tc.City_Name LIKE '%' + B.name + '%' 
) 
where NOT EXISTS(select t.* from #temp1 t where t.property_id=p.property_id and t.property_number=p.property_number and t.name=p.name and t.short_desciption=p.short_description and t.description=p.description 
-- and t.address1=ta.address1 and t.address2=ta.address2 and t.city=tc.City_Name and t.locality=cl.City_Locality_Name and t.zip=ta.zip 
) 
Смежные вопросы