2011-01-28 12 views
0

私は2つのテーブルを持っています。私が欲しいものSQL結合の問題

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

これは完璧に機能しました。Cyber​​nate SELECT t.parentid、t.wifeid spouseid、t.active、COUNT(c.personid)CNT FROM tblparents t LEFT JOIN tblnodes c ON t.parentid = c.parentid WHERE t。 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

が機能しました。もう1つ質問があります。 countが0の場合は行として表示されません。カウントが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 

EDIT:これはしかし1の最小数を返します。

0

私は表の別名「t」は、最終的な計算書に認識されていないと思います。ユニオン・ステートメントによって返されるセットにエイリアスを割り当て、select count(*)ステートメントのそのエイリアスを参照する必要があります。