2012-07-19 3 views
0

가족 구성원을 저장하는 데이터베이스를 설계하고 누구를 누가 아버지인지 찾기 위해 쿼리를 구성 할 수 있습니다. 짧은 아들 관계. 아버지 아들 관계

내가 다른 테이블

아버지을 만들어 아들과 아버지 의 관계를 찾을 수

가족

| id  |  Name | 
--------------------------- 
| 1  | Ankit  | 
--------------------------- 
| 2  | Nishant | 

...... 

로하고 이와 관련에서 온 것입니다

| father_id | Son_id | 
-------------------------------- 
| 1   |  2  | 
------------------------------- 
..... 

누군가가 저를 안내 할 수 있고 그와 같은 관계를 갖기 위해 어떤 쿼리를 작성해야하는지는 정확한지 모르겠습니다. 사전에

감사

편집

지금 쿼리에 시도했지만 어떻게 든 내가 오류 무엇입니까 이것은 내가 뭐하는 거지입니다 확인

select f.name as father_name, s.name as son_name 
from (select family.name from family,father where father.father_id = family.id) as f Inner Join 
(select family.name from family,father where father.son_id = family.id) as s 
on 
(family.id = father.father_id and family.id = father.son_id) 

오류가

입니다
Msg 4104, Level 16, State 1, Line 2 
The multi-part identifier "family.id" could not be bound. 
Msg 4104, Level 16, State 1, Line 2 
The multi-part identifier "father.father_id" could not be bound. 
Msg 4104, Level 16, State 1, Line 2 
The multi-part identifier "family.id" could not be bound. 
Msg 4104, Level 16, State 1, Line 2 
The multi-part identifier "father.son_id" could not be bound. 
+0

왜 이것이 올바르지 않다고 생각하십니까? 테이블 자체의 관계는 완벽합니다. –

+0

나는 그것이 작동 할 것이라는 아이디어를 가지고 있었지만 hus 자신의 id를 입력 할 수있는 올바른 방법이 있다는 것을 알지 못했다. 사람은 자신의 아버지가 될 수 없다. 그래서 나는 의심스러워했다. –

답변

1

와 함께 무엇을 할 수 있는지 아니, 아무 잘못 프로그래머 없습니다.

당신은 관계 테이블의 id의 기반으로 자체에 가입 조인 쿼리를 작성할 수

SELECT dad.name AS fathers_name, son.name AS sons_name 
FROM father AS R 

INNER JOIN family AS dad ON dad.id = R.father_id 
INNER JOIN family AS son ON son.id = R.son_id 

편집 :

이 내 SQL Server 버전입니다. 나는 아무런 문제없이이 일을하고있다. 당신이 당신의 조상 당신은 CTE를 사용해야의 전체 트리를해야하는 경우 귀하의 테이블 디자인이 올바른지

+0

SQL Server에 대한 괄호가 필요하지 않도록 액세스 할 수있었습니다. 먼저 테스트 쿼리를 수행하십시오. – Dpolehonski

+0

나는 길을 시도했지만 어쨌든 쿼리에서 오류가 발생하면 제발 도와주세요. 방금 질문을 편집했습니다 –

+0

지금 편집 된 버전을 사용해보십시오. 나는 SQL 서버 2012에서 이것을 만들었습니다. – Dpolehonski

1

디자인이 작동 할 수 있습니다. 거기에 "잘못된"것은 없습니다.

하지만 다른 방법이 있습니다.

아버지 행을 가리키는 FAMILY 테이블의 FATHER_ID 열을 가질 수 있습니다. 그것은 자체를 참조하는 외래 키입니다. 그렇게 별도의 테이블이 필요하지 않습니다.

+0

당신은 질의로 저를 안내해 주시겠습니까? 제 질문을 편집했습니다. –

2

는 잘 작동합니다,하지만 당신은 하나의 테이블

Id Name  Father 
1 Ankit  Null 
2 Nishant 1 
0

그러나 나는 테이블 Person

SELECT 
    FamliyFather.name AS FatherName 
    , FamliySon.name AS SonName 
FROM 
    Family AS FamliyFather 
    INNER JOIN Father 
    ON FamliyFather.id = Father.father_id 
    INNER JOIN Family AS FamliySon 
    ON Father.son_id = FamliySon.id 

RelationShip 이름을 바꾼 것입니다.