복붙노트

[SQL] 쿼리 테이블의 외래 키 관계

SQL

쿼리 테이블의 외래 키 관계

주어진 테이블 'foo는', 나는 지점이 foo는 외국 키가 테이블 세트를 생성하는 쿼리를해야합니다. 나는 오라클 10G를 사용하고 있습니다.

해결법

  1. ==============================

    1.이 작업 (또는 뭔가 닫기)한다 :

    이 작업 (또는 뭔가 닫기)한다 :

    select table_name
    from all_constraints
    where constraint_type='R'
    and r_constraint_name in 
      (select constraint_name
      from all_constraints
      where constraint_type in ('P','U')
      and table_name='<your table here>'); 
    
  2. ==============================

    2.다음 문은 자녀와 후손을 모두 제공해야합니다. 나는 오라클 (10) 데이터베이스를 테스트했습니다.

    다음 문은 자녀와 후손을 모두 제공해야합니다. 나는 오라클 (10) 데이터베이스를 테스트했습니다.

    SELECT  level, main.table_name  parent,
        link.table_name child
    FROM    user_constraints main, user_constraints link    
    WHERE   main.constraint_type    IN ('P', 'U')
    AND link.r_constraint_name  = main.constraint_name
    START WITH main.table_name  LIKE UPPER('&&table_name')
    CONNECT BY main.table_name = PRIOR link.table_name
    ORDER BY level, main.table_name, link.table_name
    
  3. ==============================

    3.다음은 제약 조건 이름에서 열 이름을 얻기 위해 더 마이크의 쿼리 하나의 조치를 취할 방법은 다음과 같습니다

    다음은 제약 조건 이름에서 열 이름을 얻기 위해 더 마이크의 쿼리 하나의 조치를 취할 방법은 다음과 같습니다

    select * from user_cons_columns
    where constraint_name in (
      select constraint_name 
      from all_constraints
      where constraint_type='R'
      and r_constraint_name in 
        (select constraint_name
        from all_constraints
        where constraint_type in ('P','U')
        and table_name='<your table name here>'));
    
  4. ==============================

    4.오라클 데이터베이스 온라인 문서 링크

    오라클 데이터베이스 온라인 문서 링크

    당신은 데이터 사전 뷰를 탐색 할 수 있습니다. 그들은 접두사가 :

    견본:

    select * from dictionary where table_name like 'ALL%' 
    

    마이크의 예를 계속, 당신은 / 비활성화 제약을 가능하게하는 스크립트를 생성 할 수 있습니다. 난 단지 첫 번째 행에서 '선택'수정했습니다.

    select  'alter table ' || TABLE_NAME || ' disable constraint ' || CONSTRAINT_NAME || ';'
    from all_constraints
    where constraint_type='R'
    and r_constraint_name in 
      (select constraint_name
      from all_constraints
      where constraint_type in ('P','U')
      and table_name='<your table here>');
    
  5. ==============================

    5.나는 위의 매우 따라서 여기에 복잡 답변 중 일부는 훨씬 간단 걸릴 것입니다, 늦은 대답을 좀 알고하지만 나를 어쨌든 대답 할 수 있습니다.

    나는 위의 매우 따라서 여기에 복잡 답변 중 일부는 훨씬 간단 걸릴 것입니다, 늦은 대답을 좀 알고하지만 나를 어쨌든 대답 할 수 있습니다.

           `SELECT a.table_name child_table, a.column_name child_column, a.constraint_name, 
           b.table_name parent_table, b.column_name parent_column
           FROM all_cons_columns a
           JOIN all_constraints c ON a.owner = c.owner AND a.constraint_name = c.constraint_name
           join all_cons_columns b on c.owner = b.owner and c.r_constraint_name = b.constraint_name
           WHERE c.constraint_type = 'R'
           AND a.table_name = 'your table name'`
    
  6. ==============================

    6.

    select distinct table_name, constraint_name, column_name, r_table_name, position, constraint_type 
    from (
        SELECT uc.table_name, 
        uc.constraint_name, 
        cols.column_name, 
        (select table_name from user_constraints where constraint_name = uc.r_constraint_name) 
            r_table_name,
        (select column_name from user_cons_columns where constraint_name = uc.r_constraint_name and position = cols.position) 
            r_column_name,
        cols.position,
        uc.constraint_type
        FROM user_constraints uc
        inner join user_cons_columns cols on uc.constraint_name = cols.constraint_name 
        where constraint_type != 'C'
    ) 
    start with table_name = '&&tableName' and column_name = '&&columnName'  
    connect by nocycle 
    prior table_name = r_table_name 
    and prior column_name = r_column_name;   
    
  7. ==============================

    7.데이터 사전 테이블을 설명 10G에 대한 Oracle 참조 안내서를 다운로드합니다.

    데이터 사전 테이블을 설명 10G에 대한 Oracle 참조 안내서를 다운로드합니다.

    위의 대답은 잘하지만 제약 관련 될 수있는 다른 테이블을 확인하십시오.

    SELECT * FROM DICT WHERE TABLE_NAME LIKE '%CONS%';
    

    마지막으로, 당신은 UI에서이 물건을 검색 할 수 있습니다 두꺼비 또는 SQL 개발자와 같은 도구를 얻을, 당신은 테이블을 사용하는 방법을 배우게 할 필요가 있지만, 당신은 또한 UI를 사용해야합니다.

  8. ==============================

    8.

    select      acc.table_name, acc.constraint_name 
    from        all_cons_columns acc
    inner join all_constraints ac
        on acc.constraint_name = ac.constraint_name
    where       ac.r_constraint_name in (
        select  constraint_name
        from    all_constraints
        where   table_name='yourTable'
        );
    
  9. ==============================

    9.하나 개의 테이블에 대한 모든 제약 조건

    하나 개의 테이블에 대한 모든 제약 조건

    select 
    
        uc.OWNER,
        uc.constraint_name as TableConstraint1,
        uc.r_constraint_name as TableConstraint2,
        uc.constraint_type as constrainttype1,
        us.constraint_type as constrainttype2,
        uc.table_name as Table1,us.table_name as Table2,
        ucc.column_name as TableColumn1, 
        uccs.column_name as TableColumn2
    from user_constraints uc
        left outer join user_constraints us on uc.r_constraint_name = us.constraint_name
        left outer join USER_CONS_COLUMNS ucc on ucc.constraint_name = uc.constraint_name
        left outer join USER_CONS_COLUMNS uccs on uccs.constraint_name = us.constraint_name
    where uc.OWNER ='xxxx' and uc.table_name='xxxx' 
    
  10. from https://stackoverflow.com/questions/85978/query-a-tables-foreign-key-relationships by cc-by-sa and MIT license