Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle SQ Идентифицира братя и сестри чрез братя и сестри

Не е ясно дали връзките са рефлексивни (т.е. ако B е "брат" на A след това A е "брат" на B ), тъй като имате някои дублиращи се редове с обърнати връзки във вашите данни и някои, където това свойство не е очевидно.

Ако приемем, че вашите взаимоотношения не са рефлексивни, тогава:

SQL Fiddle

Настройка на схема на Oracle 11g R2 :

CREATE TABLE A (ID, SIBS) ASSELECT 'A', 'B' FROM DUAL UNION ALLSELECT 'A', 'C' FROM DUAL UNION ALLSELECT 'B', 'A' FROM DUAL UNION ALLSELECT 'C ', 'A' ОТ DUAL UNION ALLSELECT 'C', 'D' DUAL UNION ALLSELECT 'D', 'C' ОТ DUAL UNION ALLSELECT 'E', 'F' ОТ DUAL UNION ALLSELECT 'F', 'G' ОТ DUAL UNION ALLSELECT 'G', 'H' FROM DUAL; 

Заявка 1 :

SELECT DISTINCT CONNECT_BY_ROOT( ID ) AS ID, SIBSFROM AWHERE CONNECT_BY_ROOT( ID ) <> SIBSCONNECT BY NOCYCLE PRIOR SIBS =IDORDER BY ID, SIBS 

Резултати :

<предварителен код>| ID | SIBS ||----|------|| A | Б || A | C || A | D || B | А || B | C || B | D || C | А || C | Б || C | D || D | А || D | Б || D | C || E | F || E | G || E | З || F | G || F | З || G | H |

Заявка 2 :Ако са рефлексивни, можете да използвате UNION [ALL] за да дублирате таблицата с релациите в обратна посока и след това да използвате предишната техника:

SELECT DISTINCT CONNECT_BY_ROOT( ID ) AS ID, SIBSFROM ( SELECT ID, SIBS FROM A UNION SELECT SIBS, ID FROM A) WHERE CONNECT_BY_ROOT( ID ) <> SIBSCONNECT BY NOCYCLE PRIOR SIBS =IDORDER BY ID, SIBS 

Резултати :

<предварителен код>| ID | SIBS ||----|------|| A | Б || A | C || A | D || B | А || B | C || B | D || C | А || C | Б || C | D || D | А || D | Б || D | C || E | F || E | G || E | З || F | E || F | G || F | З || G | E || G | F || G | З || H | E || H | F || H | G |


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. База данни:Конвейерни функции

  2. Какво не е наред с инсталирането на php oracle клиент oci8

  3. ЕКСПОРТИРАНЕ КАТО ИЗЯВЛЕНИЯ ЗА ВМЕСВАНЕ:Но в SQL Plus редът отменя 2500 знака!

  4. Каква е разликата между хеш присъединяване и обединяване с обединяване (Oracle RDBMS)?

  5. Инсталиране на Oracle Instant Client