2011-11-16 3 views
0

내가 같은 PID를해야합니다 첫 번째 행이 삽입됩니다 처음으로 다음MySQL은 세

id | name  | pid 

1 | sam  | NULL 

2 | sams ref | 1 

3 | pam  | NULL 

같은 테이블이 행 다른 행 두에 참조가 하나 있지만 행에서 어떤 기준을 표시 방지 null 첫 번째 행 과 관련된 행을 삽입 한 다음 새 행으로 향후 다른 행에서 참조 할 수있는 행을 삽입합니다.

지금은 세 번째 행만 표시하고 두 번째 행은 첫 번째 행의 참조를 포함하지 않습니다.

어떤 행에 다른 행에 대한 참조가있는 경우 두 행이 모두 표시되지 않아야합니다.

참조가없는 행만 표시해야합니다.

베니스 (BESIDES)는 좋은 실행입니까? 이 점에 대해 조언 해주십시오.

답변

1

사용

SELECT 
A.* 
FROM myTable A 
LEFT OUTER JOIN MyTable B ON B.PID = A.ID 
WHERE A.PID IS NULL AND B.ID IS NULL 

또는이 좋은 pratcice 여부에 관해서는

SELECT 
A.* 
FROM MyTable A 
WHERE A.ID NOT IN 
(
SELECT X.ID FROM MyTable X WHERE X.PID IS NOT NULL 
UNION 
SELECT Y.PID FROM MyTable Y WHERE Y.PID IS NOT NULL 
) 

:이 토론하는 방법이 표시되지 않는 등의 요구 사항을 모른 채

...

+0

Voila. 일. 나는 첫 번째 진술을 사용했고 나는 두 번째 것을 또한 메모 할 것이다. BESIDES ... 내 질문의 반대는 무엇입니까? 그건 고립 된 대신에 나는 참조가있는 행을 원한다. –

+0

@ JayapalChandran 일반적으로 두 번째 질문에서 물어볼 필요가 있습니다 ... 기본적으로 "IN IN"을 "IN"으로 변경하고, 처음에는 "IS NULL"을 "IS NOT NULL"로 변경합니다. – Yahia

+0

및 ... 쿼리가 서버에서 0 개의 결과를 반환합니다. 먼저 로컬 컴퓨터에서 사용하고있었습니다. 버전이 쿼리 실행 방식에 영향을 줍니까? 서버의 버전 : 5.1.56 - 내 localhost의 버전 : 5.1.30-community –