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
ÒÔÉϽá¹ûδ²âÊÔ£¬ÔÀíÓ¦¸ÃÊÇÕýÈ·µÄ£¬¿ÉÄÜÓÐЩ±ÊÎóµÄµØ·½£¬Çë´ó¼Ò¾ÀÕý¡£