SQLÊý¾Ý¿âÓï¾äÖÐÒ»Ìõ³£¼ûµÄÐкϲ¢ÎÊÌâ_SQL SERVERÊý¾Ý¿â_ºÚ¿Í·ÀÏßÍø°²·þÎñÆ÷ά»¤»ùµØ--Powered by WWW.RONGSEN.COM.CN

SQL Óï¾äÖÐÒ»Ìõ³£¼ûµÄÐкϲ¢ÎÊÌâ

×÷ÕߣººÚ¿Í·ÀÏßÍø°²SQLά»¤»ùµØ À´Ô´£ººÚ¿Í·ÀÏßÍø°²SQLά»¤»ùµØ ä¯ÀÀ´ÎÊý£º0

±¾Æª¹Ø¼ü´Ê£ºSQLÊý¾Ý¿â
ºÚ¿Í·ÀÏßÍø°²ÍøѶ£º¡¡¡¡ÎÊÌ⣺ԭÀ´ÎÊÌ⣺ÏÖÓÐÁ½¸ö±í£º¡¡¡¡±íÒ»originalword¡¡¡¡ID word¡¡¡¡--------------¡¡¡¡101 about¡¡¡¡102 abound¡¡¡¡103 beard¡¡¡¡104 boast¡¡¡¡105 beast¡¡¡¡±í¶þsimilarword¡¡¡¡ID ori...

¡¡¡¡ÎÊÌ⣺ԭÀ´ÎÊÌ⣺ÏÖÓÐÁ½¸ö±í£º

¡¡¡¡±íÒ»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
 

 

    ºÚ¿Í·ÀÏßÍø°²·þÎñÆ÷ά»¤·½°¸±¾ÆªÁ¬½Ó£ºhttp://www.rongsen.com.cn/show-10641-1.html
Íøվά»¤½Ì³Ì¸üÐÂʱ¼ä:2012-03-21 03:07:10  ¡¾´òÓ¡´ËÒ³¡¿  ¡¾¹Ø±Õ¡¿
ÎÒÒªÉêÇë±¾Õ¾£ºNµã | ºÚ¿Í·ÀÏß¹ÙÍø |  
רҵ·þÎñÆ÷ά»¤¼°Íøվά»¤ÊÖ¹¤°²È«´î½¨»·¾³£¬ÍøÕ¾°²È«¼Ó¹Ì·þÎñ¡£ºÚ¿Í·ÀÏßÍø°²·þÎñÆ÷ά»¤»ùµØÕÐÉ̽øÐÐÖУ¡QQ:29769479

footer  footer  footer  footer