ºìÁªLinuxÃÅ»§
Linux°ïÖú

oracle Ê÷½á¹¹²éѯ

·¢²¼Ê±¼ä:2008-05-09 00:02:46À´Ô´:ºìÁª×÷Õß:Juelong
select * from table_name where Ìõ¼þ1 connect by prior cols_1=cols_2 start with cols_3

ÎÒÕâÑùÀí½â
connect by ºóµÄprior¿ÉÒÔ·ÅÔڵȺŵÄÁ½±ß£¬Æäʵ·ÅÄÄÒ»±ß¶¼Ã»¹Øϵ£¬Ö÷ÒªÊÇ·ÅÔÚÄÄÒ»ÁеÄÇ°Ã棨cols_1»¹ÊÇcols_2£©¡£

priorËù·ÅÄÇÒ»ÁУ¨ÕâÀïÊÇcols_1£©£¬¿ÉÒÔÀí½âΪÊÇÁíÒ»ÁÐcols_2µÄ×Ó±êʶ£¬¼´cols_2ÊÇcols_1µÄ¸¸±êʶ¡£Ê÷½á¹¹²éѯ×ÜÊDZéÀú×Ó±êʶ£¨¼´°Ñ¶ù×ÓÈ«²¿ÕÒ³öÀ´£©¡£

start withÊÇÖ¸´ÓÄÄÌõ¼Ç¼¿ªÊ¼²éѯ

¾ÙÀý
ÓÐÒ»¸öemp±í
id name pid
10 jack 11
11 mary 12
12 lucy 15
13 dan 15
14 tim 11
15 dora

Õâ¸ö±íÐγÉÁËÒ»¸öÊ÷½á¹¹,pid±íʾ¸ÃÓû§µÄÁìµ¼

¼ÙÈçÎÒÃÇsqlÕâÑùд:
select * from emp connect by prior id=pid start with name='lucy'

½áºÏÉÏÃæËù½²£¬id¾ÍÊÇcols_1,pid¾ÍÊÇcols_2,Õâ¾äsqlÒâ˼¾ÍÊDzé³ölucyµÄËùÓÐÊÖÏ£¬idÊÇÿ¸öÔ±¹¤µÄ¹¤ºÅ£¬pidÊÇÆäÁìµ¼µÄ¹¤ºÅ¡£

×¢£ºselect * from emp connect by pid=prior id start with name='lucy';ºÍÉÏÃæÒâ˼ÍêÈ«Ò»Ñù¡£

²éѯ½á¹ûÈçÏ£º
id name pid
12 lucy 15
11 mary 12
10 jack 11

¼ÙÈçsqlÎÒÃÇÕâÑùд: select * from emp connect by prior pid=id start with name='lucy'

ÕâÑùµÄ»°£¬ÈçÉÏÃæÎÒÓÃ×ÏÉ«ÖصãÍ»³öµÄÄǾ仰£¬priorËùÔÚµÄÄÇÒ»ÁÐÊDz»ÔÚÄÇÒ»ÁеÄ×ÓÁУ¬Ò²¾ÍÊÇ˵ÎÒÃÇÒªÍêÈ«°Ñ¹Øϵµßµ¹ÁË£¬Õâ¾äsqlÀï°Ñ±íµÄpid×÷Ϊÿ¸öÔ±¹¤µÄ¹¤ºÅ£¬idÊÇÿ¸öÔ±¹¤Áìµ¼µÄ¹¤ºÅ£¬Èç´óºìÉ«±ê¼ÇµÄÄǾ仰Ê÷½á¹¹²éѯ×ÜÊDZéÀú×Ó±êʶ

ËùÒÔ²éѯ½á¹ûÊÇ:
id name pid
12 lucy 15
15 dora

(ÕâÀïpidÊÇÔ±¹¤ºÅ£¬idÊÇÁìµ¼¹¤ºÅ£¬ËùÒÔlucyÊÇÁìµ¼£¬¹¤ºÅÊÇ15£¬±éÀúÆäËùÓÐÔ±¹¤£¬Ô±¹¤µÄÁìµ¼¹¤ºÅÊÇ15µÄÔ±¹¤£¬ËùÒÔdoraÊÇÆäÔ±¹¤)

×¢ÒâÕâÀïºÜÓÐÒâ˼£¬ÕâÖÖ·½·¨±éÀú³öÀ´µÄ½á¹ûÕýºÃÊÇ°´ÕÕÕý³£Àí½â£¨idÊÇÔ±¹¤ºÅ£¬pidÊÇÁìµ¼¹¤ºÅ£©£¬¶Ô²éѯÓû§µÄËùÓÐÁìµ¼µÄ±éÀú£¨dora°´ÕÕ±í¶¨ÒåµÄʱºòÊÇlucyµÄÁìµ¼£©¡£

ËùÒÔÎÒÃÇ¶Ô connect by ×ܽáÏ£º
priorÒ»°ãÈç¹û·ÅÔÚ±í¶¨ÒåʱºòµÄidÉÏ£¬Ôòͨ¹ýstart withºóµÄ×ֶΣ¬±éÀúËùÓиÃ×ֶεÄÏÂÊô¼Ç¼

priorÈç¹û·ÅÔÚ±í¶¨ÒåʱºòµÄ¸Ã¼Ç¼¶ÔÓ¦ÉÏÊôidÉÏ£¬Ôòͨ¹ýstart withºóµÄ×ֶΣ¬±éÀúËùÓиÃ×ֶεÄÉÏÊô¼Ç¼

------

start with ÊÇÖ¸´ÓÄÄÌõ¼Ç¼¿ªÊ¼±éÀú£¬Èç¹û²»Ð´Ôò»áÒÀ´Î±éÀúËùÓмǼµÄÏÂÊô£¨»òÕßÉÏÊô£©

Èç¹ûÒªÏÞÖƲ»ÏëÏÔʾһ¸ö¼Ç¼µÄËùÓÐÏÂÊô£¨ÉÏÊô£©£¬ÒªÔÚconnect by ºóÏÞÖÆ£¬ÈçÎÒÃÇÒªÏÔʾlucyµÄËùÓÐÏÂÊô£¬µ«²»ÏëÏÔʾmary ºÍÆäËùÓÐÏÂÊô£¬Ôò

select * from emp connect by prior id=pid and name<>'mary' start with name='lucy'

½á¹û£º
id name pid
12 lucy 15

µ«Èç¹ûÎÒÃÇÖ»ÊDz»ÏëÏÔʾmary£¬µ«maryµÄÏÂÊôÎÒÃÇ»¹ÏëÏÔʾ³öÀ´£¬ÔòÔÚwhere ºóÏÞÖÆ

select * from emp where name<>'mary' connect by prior id=pid start with name='lucy'

½á¹û£º
id name pid
12 lucy 15
10 jack 11

ÒÔÉϽá¹ûδ²âÊÔ£¬Ô­ÀíÓ¦¸ÃÊÇÕýÈ·µÄ£¬¿ÉÄÜÓÐЩ±ÊÎóµÄµØ·½£¬Çë´ó¼Ò¾ÀÕý¡£
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 0 ÌõÆÀÂÛ