¡¡¡¡ÎÊÌ⣺ÔÀ´ÎÊÌ⣺ÏÖÓÐÁ½¸ö±í£º
¡¡¡¡±íÒ»originalword
¡¡¡¡ID word
¡¡¡¡--------------
¡¡¡¡101 about
¡¡¡¡102 abound
¡¡¡¡103 beard
¡¡¡¡104 boast
¡¡¡¡105 beast
¡¡¡¡±í¶þsimilarword
¡¡¡¡ID original_id similar_id
¡¡¡¡-------------------------------
¡¡¡¡1 101 102
¡¡¡¡2 102 101
¡¡¡¡3 103 105
¡¡¡¡4 105 103
¡¡¡¡5 104 105
¡¡¡¡6 105 104
¡¡¡¡±íoriginalwordºÍ±ísimilarwordÓйØϵ£º
¡¡¡¡±ísimilarwordµÄoriginal_idÊDZíoriginalwordÖеÄID
¡¡¡¡±ísimilarwordµÄsimilar_idÒ²ÊDZíoriginalwordÖеÄID
¡¡¡¡µÚÒ»¸ö±íÊÇÒ»¸öµ¥´Ê±í£¬ÊÇÔ´µ¥´Ê
¡¡¡¡µÚ¶þ¸ö±íÊÇÓɵÚÒ»¸ö±íÀ´µÄ£¬ÊÇÐνü´ÊµÄidÁбí
¡¡¡¡Èç±íÒ»ÖеÄ101ºÍ102ÊÇÐνü´Ê£¬ÔòÔÚµÚ¶þ¸ö±íÖÐÎÒ²åÈëÁË(101,102)ºÍ(102,101)Á½¸ö¼Ç¼
¡¡¡¡103ºÍ104·Ö±ðºÍ105ÊÇÐνü´Ê£¬ÔòÔÚµÚ¶þ¸ö±íÖÐÎÒ²åÈëÁË(103,105)¡¢(105,103)¡¢(104,105)¡¢(105,104)Ëĸö¼Ç¼
¡¡¡¡Ïë²éѯ³öÈçϵĽá¹û£º
¡¡¡¡½á¹û±í
originalword.ID orig_word similar_word
-------------------------------------------
101 about abound
102 abound about
103 beard beast
104 boast beast
105 beast beard, boast
¡¡¡¡Çë´ó¼Ò°ïæ°¡£¬Ð´¸ö²éѯÓï¾ä£¬¼±!ллÏÈ!
¡¡¡¡»Ø´ð£º
¡¡¡¡ÕâÑùµÄÎÊÌâÒ»°ãд¸ö×Ô¶¨Ò庯Êý£¬ÓÉorig_word ͳ¼Æsimilar_word£¬¾Í¿ÉÒÔʵÏÖ¡£
¡¡¡¡À´×ÔÒ»ÅóÓѽÐhxd001_810£¬Ê¹ÓÃ×Ô¶¨Ò庯ÊýµÄ·½·¨£º
¡¡¡¡Óú¯Êý½â¾öÖ®¡£´úÂëÈçÏ£º
--´´½¨Ò»¸öºÏ²¢µÄº¯Êý
create function f_hb(@original_id varchar(10))
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str = ''
select @str = @str + ',' +b.word
from similarword a inner join dbo.originalword b on a.similar_id=b.ID
where original_id = @original_id
set @str = right(@str , len(@str) - 1)
return(@str)
End
go
--µ÷ÓÃ×Ô¶¨Ò庯ÊýµÃµ½½á¹û£º
select distinct a.original_id [originalword.ID],b.word [orig_word],dbo.f_hb(a.original_id) as similar_id
from similarword a inner join dbo.originalword b on a.original_id=b.ID
go
·µ»Ø:
originalword.ID orig_word similar_id
--------------- ------------- -----------
101 about abound
102 abound about
103 beard beast
104 boast beast
105 beast beard,boast
¡¡¡¡(ËùÓ°ÏìµÄÐÐÊýΪ 5 ÐÐ)
¡¡¡¡´ÓÐÔÄÜ·ÖÎö£¬¸öÈËÈÏΪʹÓÃ×Ô¶¨Ò庯ÊýÐÔÄܱÈʹÓÃÑ»·Óï¾äЧÂʵÍÒ»µã£¬ÌرðÊÇÔÚ´¦Àí´óÁ¿Êý¾Ýʱºò¡£
¡¡¡¡ÒÔÏÂÊÇ×Ô¼ºÐ´µÄÒ»¸öʹÓÃÑ»·µÄ·½·¨£º¡¡
SET NOCOUNT ON
CREATE TABLE originalword(id int ,word nvarchar(30))
CREATE TABLE similarword (ID int ,original_id int,similar_id int)
GO
INSERT INTO originalword
SELECT 101, 'about' UNION ALL
SELECT 102, 'abound' UNION ALL
SELECT 103, 'beard' UNION ALL
SELECT 104, 'boast' UNION ALL
SELECT 105, 'beast'
INSERT INTO similarword
SELECT 1, 101, 102 UNION ALL
SELECT 2, 102, 101 UNION ALL
SELECT 3, 103, 105 UNION ALL
SELECT 4, 105, 103 UNION ALL
SELECT 5, 104, 105 UNION ALL
SELECT 6, 105, 104
GO
DECLARE @Result TABLE(id int IDENTITY(1,1),[originalword.ID] int,orig_word nvarchar(30),similar_word nvarchar(30))
INSERT INTO @Result ([originalword.ID],orig_word) SELECT * FROM originalword
DECLARE @i int
,@j int
,@similar_word nvarchar(200)
SELECT @i=1,@j=ISNULL(COUNT(1),0) FROM @Result
WHILE @i<=@j
BEGIN
SET @similar_word=''
SELECT @similar_word=@similar_word+word+',' FROM
(SELECT B.word FROM similarword A INNER JOIN originalword B ON A.original_id=B.ID
AND EXISTS(SELECT 1 FROM @Result C WHERE C.[originalword.ID]=A.original_id AND C.ID=@i)) Tmp
IF(ISNULL(@similar_word,'')<>'')
UPDATE @Result SET similar_word=SUBSTRING(@similar_word,1,LEN(@similar_word)-1) WHERE ID=@i
SET @i=@i+1
END
SELECT [originalword.ID],orig_word,similar_word FROM @Result
GO
DROP TABLE originalword,similarword
GO