2011-10-04 5 views
0

내 내부 조인 부문에 문제가 있습니다. 내 오라클에서 이미 닫을 때 오른쪽 괄호가 누락되었다는 메시지를 계속 표시합니다. 모든 품목을 모은 환자의 이름을 알아야합니다. 당신은 단지 A1의 별칭과 알의 별칭을 가진 것은 매우 혼란이다SQL 내부 조인 부문

SELECT p.name 
    FROM patient p 
     INNER JOIN account a ON (a.patientID = p.patientID) 
     INNER JOIN accountType accTyp ON (accTyp.accountNo = a.accountNo) 
     INNER JOIN item i ON (i.itemNo = accTyp.itemNo) 
GROUP BY accTyp.itemNo 
HAVING COUNT(*) = (SELECT COUNT(*) 
        FROM accountType); 

참고 원하는처럼

Select P.name 
From ((((Select Patientid From Patient) As P 
Inner Join (Select Accountno, Patientid From Account) As A1 
on P.PatientID = A1.PatientID) 
Inner Join (Select Accountno, Itemno From AccountType) As Al 
On A1.Accountno = Al.Accountno) 
Inner Join (Select Itemno From Item) As I 
On Al.Itemno = I.Itemno) 
Group By Al.Itemno 
Having Count(*) >= (Select Count(*) FROM AccountType); 

답변

1

는 여기에 내가 본질적으로 동일하다 생각 간단한 방법입니다. 본질적으로 '조인 테이블'을 메모리에 조인 할 경우 실제 테이블에 존재하는 인덱스의 이점을 얻지 못합니다. 기억.

보통 'a', 'b', 'c', 'd'와 같은 순차 문자를 사용하여 별칭 테이블 이름을 볼 수 있습니다. 나는 복잡한 쿼리를 작성할 때 쉽게 따라갈 수 있다고 생각합니다. 'a'는 조인의 첫 번째 테이블이고 'b'는 두 번째 등입니다.

+0

보여주는 기록이되지 않습니다. 답변을 모두 시도한 후에 제공됩니다. p.name 인 1 행에서 '표현에 의한 그룹이 아님'을 알려줍니다. 그러나 p.name으로 그룹화 할 수는 없습니다. 결과가 나타나지 않을 것입니다. 어떤 아이디어? – JLearner

+0

그 문제를 해결하기 위해 쿼리를 편집했습니다. 나는 그것이 효과가있을 것이라고 믿는다. 기본적으로 선택 방법을 수행하려면 a.name이 그룹별로 열에 있어야 할 가능성이 큽니다. Accountno별로 그룹화하고 있지만 이름 만 선택하면 여전히 문제가있을 수 있습니다. –

+0

같은 결과가 있습니다. 표시되는 행이 없습니다. 바로 옆에 5 개의 행이 있어야합니다. 내가 테이블에 가입 할 때 나는 어떤 행도 보지 못했습니다. 어떤 아이디어? – JLearner

1

는 소리가 난다. 보다 의미 있고 별개의 별칭을 선택하려고합니다.

select a.name 
from Patient a 
inner join Account b on a.PatientID = b.PatientID 
inner join AccountType c on b.Accountno = c.Accountno 
inner join Item d on c.Itemno = d.Itemno 
group by c.Accountno, a.name 
having Count(*) >= (Select Count(*) FROM AccountType); 

이러한 접근 방식은 조금 간단하다 :

+0

줄 1의 표현식에 의해 그룹을 표시하는 데 오류가 있습니다. 오라클이 p.name으로 그룹화하려고합니다. 그러나 그렇게 할 수는 없습니다. 귀하의 코멘트를 주셔서 감사합니다 – JLearner