2011-01-28 3 views
0

2 개의 테이블이 있습니다.SQL Join 문제

tblparents 
---------- 
parentid 
husbandid 
wifeid 

tblnode 
------- 
nodeid 
personid 
parentid 

는 내가 원하는 parentid, 남편/wifeid 및 parentid 년대가 동일한 tblnode의 행의 수를 취득하는 SQL 문입니다. 'where 절'에서 알 수없는 열 't.parentid'-

나는 그것은 오류 # 1054을 제공하는 코드

SELECT t.parentid, t.spouseid, t.active, c.count FROM  
(SELECT parentid, wifeid spouseid from tblparents WHERE husbandid=1 
UNION 
SELECT parentid, husbandid spouseid from tblparents WHERE wifeid=1) t 
INNER JOIN 
(SELECT COUNT(*) count FROM tblnodes WHERE tblnodes.parentid=t.parentid) c; 

을 썼다.

어떤 아이디어를 해결할 수 있습니까?

감사 무리

답변

0

구문 오류가 있습니다. 이 시도 :

SELECT t.parentid, t.spouseid, t.active, c.count FROM  
(SELECT parentid, wifeid spouseid from tblparents WHERE husbandid=1 
UNION 
SELECT parentid, husbandid spouseid from tblparents WHERE wifeid=1) t 
INNER JOIN 
(SELECT parentid, COUNT(*) count 
FROM tblnodes GROUP BY parentid) c 
ON c.parentid=t.parentid) c ; 

그러나 다음 쿼리가 더 나은 수행합니다

SELECT t.parentid, t.wifeid spouseid, t.active, COUNT(t.parentid) CNT 
FROM tblparents t LEFT JOIN tblnode c 
    ON t.parentid = c.parentid 
GROUP BY t.parentid. t.wifeid, t.active 
+0

, 당신은 tblparents T는 왼쪽부터 t.parentid, t.wifeid의 spouseid, t.active, COUNT (c.personid) CNT tblnodes C ON t.parentid = c.parentid WHERE t 가입을 선택 Cybernate 감사합니다. husbandid = 1 GROUP BY t.parentid, t.wifeid – MeCe

1

이 시도 :

SELECT t.parentid, t.spouseid, t.active, COALESCE(c.count, 0) AS count 
FROM (
    SELECT parentid, wifeid spouseid 
    FROM tblparents 
    WHERE husbandid = 1 

    UNION 

    SELECT parentid, husbandid spouseid 
    FROM tblparents 
    WHERE wifeid = 1 
) t 
LEFT JOIN (
    SELECT parentid, COUNT(*) count 
    FROM tblnodes 
    GROUP BY parentid 
) c 
    ON c.parentid = t.parentid 
+0

이제는 또 다른 질문이 생깁니다. count가 0이면 행으로 표시하지 않습니다. count가 0이더라도 행을 표시하고 싶습니다. – MeCe

+0

@MeCe LEFT JOIN을 사용하십시오. 이 완벽했다 –

0

내가 제대로 질문을 이해한다면 :

SELECT t.parentid, t.husbandid, t.wifeid, COUNT(*) 
LEFT JOIN tblnode n 
    ON n.parentid = t.parentid 
GROUP BY t.parentid. t.husbandid, t.wifeid 

편집 :이 비록 1의 최소 수를 반환합니다.

0

나는 테이블 별칭 "t"가 최종 손익으로 인식되지 않는 생각합니다. 통합 된 명령문에 의해 반환 된 집합에 별칭을 할당하고 select count (*) 문에서 해당 별칭을 참조해야합니다.