0

私は2つのテーブルを持っています。

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

tblnode
-------
nodeid
personid
parentid

私が欲しいのは、parentid、husband / wifeid、およびparentidが等しいtblnodeの行数を取得するSQLステートメントです。

コードを書きました

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;

エラー#1054-'where句'の不明な列't.parentid'が表示されます。

解決する方法はありますか?

本当にありがとう、

4

4 に答える 4

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
于 2011-01-28T21:49:52.150 に答える
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の最小カウントを返します。

于 2011-01-28T21:50:53.030 に答える
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
于 2011-01-28T21:52:43.677 に答える
0

テーブルエイリアス「t」は最終ステートメントで認識されていないと思います。unionedステートメントによって返されるセットにエイリアスを割り当て、select count(*)ステートメントでそのエイリアスを参照する必要があります。

于 2011-01-28T21:53:06.453 に答える