"List of foreign keys and the tables they reference"을 사용하면 조인 테이블의 이름과 조인 할 테이블의 이름을 가져올 수 있지만 세 번째 테이블의 이름은 알 수 없습니다. 세 테이블/필드를 다 대다 (many-to-many)와 관련되게하려면 어떻게합니까? 내가 얻는 방법 (두 번째 행에 r2_ *주의) 다음many-to-many 조인에 관련된 테이블과 컬럼 이름을 얻으려면 어떻게해야합니까?
예를 들어:
TableName Field r_TableName r_Field r2_TableName r2_Field
Users VehicleId Vehicles Id NULL NULL
UserGroups UserId Groups Id Users Id
Cats UserId Users Id NULL NULL
주어진 다음의 표 : 나는 변화와 함께 일한지
CREATE TABLE Users(
Id NUMBER(10,0),
UserName NVARCHAR2(20),
VehicleId NUMBER(10,0),
CONSTRAINT user_pk PRIMARY KEY(ID)
);
ALTER TABLE Users ADD CONSTRAINT
users__vehicle_fk FOREIGN KEY(VehicleId) REFERENCES Vehicles(Id) ENABLE;
CREATE TABLE Vehicles(
ID NUMBER(10,0),
VehicleName NVARCHAR2(20),
CONSTRAINT vehicle_pk PRIMARY KEY(ID)
);
CREATE TABLE Cats(
ID NUMBER(10,0),
CatName NVARCHAR2(20),
UserId NUMBER(10,0),
CONSTRAINT cat_pk PRIMARY KEY(ID)
);
ALTER TABLE Cats ADD CONSTRAINT
cat__user_fk FOREIGN KEY(UserId) REFERENCES Users(ID) ENABLE;
CREATE TABLE Groups(
Id NUMBER(10,0),
GroupName NVARCHAR2(20),
CONSTRAINT group_pk PRIMARY KEY(ID)
);
CREATE TABLE UserGroups (
UserId NUMBER(10,0),
GroupId NUMBER(10,0),
CONSTRAINT user__groups_pk PRIMARY KEY(UserId, GroupId)
);
ALTER TABLE UserGroups ADD CONSTRAINT
userGroups__user_fk FOREIGN KEY(UserId) REFERENCES Users(Id) ENABLE;
ALTER TABLE UserGroups ADD CONSTRAINT
userGroups__group_fk FOREIGN KEY(GroupId) REFERENCES GROUPS(ID) ENABLE;
의 :
SELECT ac1.OWNER, ac1.CONSTRAINT_NAME, ac1.CONSTRAINT_TYPE, ac1.TABLE_NAME,
ac1.R_OWNER, ac1.R_CONSTRAINT_NAME, '@@@@@@@@@@'
, ac2.OWNER, ac2.CONSTRAINT_NAME, ac2.CONSTRAINT_TYPE, ac2.TABLE_NAME,
ac2.R_OWNER, ac2.R_CONSTRAINT_NAME, '@@@@@@@@@@'
,conscols.*, '@@@@@@@@@@'
,r_conscols.*
FROM all_constraints ac1
JOIN all_constraints ac2
ON ac1.r_constraint_name = ac2.constraint_name
AND ac1.owner = ac2.owner
JOIN all_cons_columns conscols
ON ac1.owner = conscols.owner
AND ac1.CONSTRAINT_NAME = conscols.constraint_name
JOIN all_cons_columns r_conscols
ON ac2.owner = r_conscols.owner
AND ac2.CONSTRAINT_NAME = r_conscols.constraint_name
AND r_conscols.POSITION = conscols.POSITION
내 샘플에 세 개의 행의 두 번째와 같은 간접적 인 관계에 대한 원시 데이터를 (볼 수 있습니다 출력). 그러나 직접 관계로 데이터를 결합하는 명확한 방법이 없기 때문에 모두 동일한 M : M 조인을 포함한다는 것을 알 수 있습니다.
주 : 많은 것보다 깊은 관계 : 단일 조인 테이블을 사용하는 많은 것을 고려할 필요가 없습니다.
이 데이터를 함께 수집하려면 어떻게해야합니까?
응답 해 주셔서 감사합니다. 그러나 이것은 내가 찾고있는 것이 아닙니다. –